介绍
nodejs官网提供docker镜像,并且镜像自带npm工具,也就是说,齐全能够用docker镜像编译本地前端我的项目,那相比本地装置nodejs编译,docker编译有哪些劣势呢
- 能够装置多个版本nodejs,能够抉择指定版本nodejs进行编译,如果你是要搭建一个构建平台,这是个十分好的计划
- 免装置,如果须要装置多版本nodejs,这个劣势就很显著了
- 不会净化本地环境
如果你是集体开发,应用docker编译我的项目绝对有点极客行为,在集体开发上并没有太大的劣势,然而如果你是要搭建一个构建零碎,那么docker镜像的计划是你最好的抉择。
实现
尽管nodejs官网提供了镜像但实际下来如果间接用官网的镜像,无奈达到想要的成果,起因有以下几点
- nodejs我的项目初衷是用javascript作为后端预言,所以镜像次要是用于后端服务
- 镜像尽管自带了npm工具,但因为WORKDIR的关系无奈失常编译,尝试过多种办法还是无奈顺利编译
- 基于官网的镜像做二次构建老本很低,所以倡议依据本人的需要做二次构建
咱们先实现一个npm install
性能的镜像
- 筹备Dockerfile文件
from node:16.3.0WORKDIR /user/appENTRYPOINT ["npm","install"]
WORKDIR必须指定,应用时将我的项目挂载到WORKDIR即可
- 构建镜像
docker build -t node-install:16.3.0 .
- 咱们以编译这个我的项目为例
➜ docker run -v /u01/workspace/vue-2.0-simple-routing-example:/user/app -it --rm node-install:16.3.0up to date, audited 615 packages in 12s1 package is looking for funding run `npm fund` for details63 vulnerabilities (17 low, 17 moderate, 27 high, 2 critical)To address issues that do not require attention, run: npm audit fixTo address all issues (including breaking changes), run: npm audit fix --forceRun `npm audit` for details.
顺利完成npm install,咱们能够再制作一个build的镜像用户构建,不过咱们能够将install和build放到一个镜像里。
- 筹备脚本entrypoint.sh
#!/bin/bashnpm installnpm run build
- Dockerfile
from nodeWORKDIR /user/appCOPY entrypoint.sh /RUN chmod +x /entrypoint.shENTRYPOINT ["/entrypoint.sh"]
- 构建镜像
docker build -t node-build:16.3.0 .
- 测试
➜ docker run -v /u01/workspace/vue-2.0-simple-routing-example:/user/app -it --rm node-build:16.3.0.....> build> cross-env NODE_ENV=production webpack --progress --hide-modulesHash: a6a2352d086bcda1ccb9 Version: webpack 2.5.1Time: 2581ms Asset Size Chunks Chunk Namesbuild.js 87.9 kB 0 [emitted] main
这样咱们就制作了一个十分不便的前端构建镜像
补充
后面提到过,因为WORKDIR的关系无奈应用官网镜像进行编译我的项目,前面才晓得docker在启动时能够指定WORKDIR,因而还能够通过指定WORKDIR进行编译
docker run -v /u01/workspace/vue-2.0-simple-routing-example:/user/app -w /user/app -it --rm node:16.3.0 npm installdocker run -v /u01/workspace/vue-2.0-simple-routing-example:/user/app -w /user/app -it --rm node:16.3.0 npm run build
参考
- 如何用docker编译java我的项目