我有一个类似于此的节点应用程序的Dockerfile:
FROM node:8.3
ENV TERM=xterm-color NPM_CONFIG_LOGLEVEL=warn PATH="$PATH:/usr/src/app/node_modules/.bin/"
WORKDIR /usr/src/app
ADD . /usr/src/app
RUN yarn install --frozen-lockfile --ignore-platform --ignore-engines --quiet && tsc && webpack
CMD ["node", "/usr/src/app/server"]
然而,这意味着在对源树的每次更改时,带有RUN yarn install ...
的图层将无效并再次运行。
由于纱线安装本身需要大约80秒,即使仅Readme.md
发生变化,构建也会不必要地减慢速度。
我想在package.json或yarn install
更改后才使用yarn.lock
。
这个问题也适用于npm及其包装
答案 0 :(得分:0)
您可以缓存package.json和相应的锁定文件,并在临时文件夹中运行安装。添加源后,您可以将node_modules和文件复制到主app文件夹中。
以下是使用yarn install
。
FROM node:8.3
ENV TERM=xterm-color NPM_CONFIG_LOGLEVEL=warn PATH="$PATH:/usr/src/app/node_modules/.bin/"
VOLUME ["/logs"]
WORKDIR /tmp/node
ADD package.json yarn.lock ./
RUN yarn install --frozen-lockfile --ignore-platform --ignore-engines --quiet
WORKDIR /usr/src/app
ADD . /usr/src/app
RUN mv /tmp/node/* ./ && tsc && webpack
CMD ["node", "/usr/src/app/server"]
使用time
的快速指标会为docker build .
上的调整后的Dockerfile返回这些输出:
对于npm,根据您的版本,您需要添加
npm-shrinkwrap.json
package-lock.json
作为yarn.lock
文件的内容。