ビルドステージの番号による参照

COPY --fromでは役割が分かるステージ名を使ってください。

説明

COPY --from=0のようにビルドステージを番号で参照することは有効です。ただし、前にステージを追加したり順番を変更したりすると、参照先が変わることがあります。名前を使うと、ステージの順番への依存を減らせます。

想定される影響

ステージの順番を変更した後に、意図しないファイルをコピーしたり、ビルドに失敗したりするおそれがあります。

対処方法

参照するFROMステージにAS builderのような一意の名前を付け、COPY --from=builderで参照してください。

例

同じ成果物を番号と名前で参照する例です。GO_BUILD_IMAGEとRUNTIME_IMAGEにはサポート対象のイメージ参照を指定し、成果物のプラットフォームや実行時ライブラリが実行用イメージと互換性があることを確認してください。

変更前

dockerfile
ARG GO_BUILD_IMAGE
ARG RUNTIME_IMAGE
FROM ${GO_BUILD_IMAGE}
WORKDIR /src
COPY . .
RUN go build -o app .

FROM ${RUNTIME_IMAGE}
COPY --from=0 /src/app /app/app
CMD ["/app/app"]

変更後

dockerfile
ARG GO_BUILD_IMAGE
ARG RUNTIME_IMAGE
FROM ${GO_BUILD_IMAGE} AS builder
WORKDIR /src
COPY . .
RUN go build -o app .

FROM ${RUNTIME_IMAGE}
COPY --from=builder /src/app /app/app
CMD ["/app/app"]

参考資料