動かざることバグの如し

近づきたいよ 君の理想に

Docker multi-stageビルドの中間イメージをdocker runしたい

環境

  • Docker 26

やりたいこと

例えば以下のようなマルチステージビルドのDockerfileがあるとする。

FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

FROM alpine:latest
COPY --from=builder /app/myapp /myapp
CMD ["/myapp"]

で、通常たと最後のFROMイメージが使われるがデバッグ目的でbuilderイメージをdocker runしたい。

解決策

--target をつける

docker build --target builder -t myapp-builder .

--targetオプションの解説

--targetオプションはDockerのマルチステージビルドにおいて特定のステージまでのビルドを指定するためのものである。このオプションを使用すると、ビルドプロセスを特定のステージで停止し、そのステージのイメージを生成することができる。これはデバッグや特定のビルドステージの成果物を確認するために有用である。上記の例では、builderステージまでのビルドを行い、その結果をmyapp-builderという名前のイメージとして保存する。このイメージは後でdocker runコマンドで実行することができる。

このように、--targetオプションはビルドプロセスの柔軟性を大幅に向上させる。