3

コンテキストは次のとおりです。

  • ジェンキンス
  • Kubernetes プラグイン
  • Docker-in-Docker/dind コンテナ
  • マルチステージ Dockerfile

フローは次のようになります。

  1. プルビルダーdocker pull repo/image:builder
  2. ビルドビルダーDOCKER_BUILDKIT=1 docker build . --build-arg BUILDKIT_INLINE_CACHE=1 --target builder --cache-from repo/image:builder --tag repo/image:builder
  3. プッシュビルダーdocker push repo/image:builder
  4. プル画像docker pull repo/image:tag
  5. ビルドイメージDOCKER_BUILDKIT=1 docker build . --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from repo/image:builder --cache-from repo/image:tag --tag repo/image:tag
  6. プッシュ画像docker push repo/image:tag

Dockerfile:

FROM node:8.16.0 as builder

WORKDIR /app
RUN mkdir /app/frontend
COPY frontend/package.json /app/frontend/
WORKDIR /app/frontend
RUN npm install
COPY frontend /app/frontend
RUN npm run build
FROM nginx:1.13.8-alpine
WORKDIR /project/web
COPY --from=builder --chown=nginx:nginx /app/frontend/built /project/web/public

ドッカービルドでCOPY --from=builder --chown=nginx:nginx /app/frontend/built /project/web/public、エラーなしで永遠にスタックします(30〜40分後、手動で停止します)。

編集: 最初の実行時に、イメージがまだレジストリに存在しない場合、ビルダーのキャッシュとCOPY --from=builder動作は期待どおりです。2回目以降のビルドからのみ、スタックしますCOPY --from=builder

4

0 に答える 0