Ale*_*lls 6 node.js docker dockerfile
我们使用的标准做法是在版本控制中不包括node_modules。但是,在通过CI / CD管道移动时,我们必须在多个位置重新安装NPM依赖项,这会使一切变得非常缓慢。
有没有办法以某种方式缓存Docker的NPM依赖关系?我搜索了Google“ docker缓存npm依赖项”,而2014年的第一个匹配项产生了无效链接。
没有其他有价值的东西出现了。
一种解决方案是在版本控制中包括node_modules,但是我认为这将是一个巨大的错误。我认为以某种方式缓存依赖项将是最佳选择。
这是Dockerfile的样子:
FROM node:6
COPY . . # copy all files, but node_modules does not exist ( => gitignored)
RUN npm install --no-optional --only=production > /dev/null 2>&1
RUN npm install -g bower > /dev/null 2>&1
RUN bower install --config.interactive=false --allow-root > /dev/null 2>&1
ENTRYPOINT ["/bin/bash", "/root/cdt/run.sh"]
Run Code Online (Sandbox Code Playgroud)
这是一种可能的解决方案,但是我不太清楚它是如何工作的:
=> http://bitjudo.com/blog/2014/03/13/building-efficient-dockerfiles-node-dot-js/
这种方法就像魔术一样工作:
https://blog.playmoweb.com/speed-up-your-builds-with-docker-cache-bfed14c051bf
Docker为您提供了一种特殊的缓存方式,显然,最好使用先天的缓存功能。
不能说我完全理解它是如何工作的,但是它确实起作用。
如果您遵循此模式,它将为您工作:
FROM mhart/alpine-node:5.6.0
WORKDIR /src
# Expose the port 3000
EXPOSE 3000
# Set the default command to run when a container starts
CMD ["node", "server.js"]
# Install app dependencies
COPY package.json /src
RUN npm install
# Copy your code in the docker image
COPY . /src
Run Code Online (Sandbox Code Playgroud)
您是否尝试过使用yarn而不是npm,这样速度更快?Yarn 并行安装包
https://yarnpkg.com/lang/en/compare/
收集的其他技巧:
方括号中是我的情况下节省的相对时间
node_modules预先安装可以加快速度(来源: https: //github.com/npm/cli/issues/3208#issuecomment-1002990902)。[-80秒]npm@8alpineRUN mkdir node_modules
Run Code Online (Sandbox Code Playgroud)
RUN npm ci --no-audit
Run Code Online (Sandbox Code Playgroud)
RUN npm install -g pnpm
RUN pnpm install
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6249 次 |
| 最近记录: |