提问者:小点点

加快Docker容器中NPM安装速度


我们使用的标准做法是在版本控制中不包括node_modules。但是,在通过CI/CD管道时,我们必须在多个地方重新安装NPM依赖项,这会使所有操作变得非常缓慢。

有没有一种方法可以用Docker缓存NPM依赖项?我在谷歌搜索“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/


共1个答案

匿名用户

这个方法像魔术一样奏效:

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