加速Docker容器中的NPM安装

时间:2017-05-04 18:58:05

标签: node.js docker dockerfile

我们在版本控制中使用不包括node_modules的标准做法。但是,当通过CI / CD管道移动时,我们必须在几个地方重新安装NPM依赖项,这使得一切都非常慢。

有没有办法以某种方式缓存与Docker的NPM依赖关系?我搜索了Google“docker cache npm dependencies”,并且从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"]

这是一个可能的解决方案,但我无法弄清楚它是如何工作的:

=> http://bitjudo.com/blog/2014/03/13/building-efficient-dockerfiles-node-dot-js/

2 个答案:

答案 0 :(得分:5)

这种方法就像魔法一样:

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

答案 1 :(得分:2)

您是否尝试过使用纱线代替npm更快?纱线做并行包安装

https://yarnpkg.com/lang/en/compare/