加快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://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