私のコード (nodeJS-application) は (npm) の依存関係よりも頻繁に変更されるため、CI にキャッシュのようなものを構築しようとしました。
マルチステージ Dockerfile を使用しています。その中で、すべての prod 依存関係に対してのみ npm install を実行します。後でそれらは最終イメージにコピーされるため、はるかに小さくなります。偉大な。
また、依存関係が変更されていない場合、ビルドは非常に高速になります。
ただし、時間の経過とともに hd がいっぱいになるdocker prune ...
ため、スペースを取り戻すために実行する必要があります。しかし、これを行うと、キャッシュがなくなります。
そのため、CI で各パイプラインの後に実行するprune
と、マルチステージ Dockerfile の「キャッシュ機能」が得られません。
### 1. Build
FROM node:10.13 AS build
WORKDIR /home/node/app
COPY ./package*.json ./
COPY ./.babelrc ./
RUN npm set progress=false \
&& npm config set depth 0 \
&& npm install --only=production --silent \
&& cp -R node_modules prod_node_modules
RUN npm install --silent
COPY ./src ./src
RUN ./node_modules/.bin/babel ./src/ -d ./dist/ --copy-files
### 2. Run
FROM node:10.13-alpine
RUN apk --no-cache add --virtual \
builds-deps \
build-base \
python
WORKDIR /home/node/app
COPY --from=build /home/node/app/prod_node_modules ./node_modules
COPY --from=build /home/node/app/dist .
EXPOSE 3000
ENV NODE_ENV production
CMD ["node", "app.js"]