加快Docker容器中的NPM安装

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

有没有办法以某种方式与DockercachingNPM依赖关系? 我search了Google“docker cache npm dependencies”,2014年的第一个命中产生了一个死链接。

没有什么值得的。

一个解决scheme是在版本控制中包含node_modules,但是我认为这将是一个巨大的错误。 我认为caching依赖关系将是最好的select。

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"] 

这是一个可能的解决scheme,但我不能完全弄清楚它是如何工作的:

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

你试过使用纱线,而不是npm这是更快? 纱线并行包安装

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

这个方法像魔术一样工作:

https://blog.playmoweb.com/speed-up-your-builds-with-docker-cache-bfed14c051bf

Docker有一个特殊的caching方法,显然最好是使用天生的cachingfunction。

不能说我完全理解它是如何工作的,但它确实有效。

如果你遵循这个模式,它会为你工作:

 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