【マルチステージビルド】
マルチステージビルド とは?
最終更新:
💡 ビルド段階を分け、必要な成果物を次の段階へ渡す
一つのDockerfileに複数のFROMを書いてビルド段階を分け、必要なファイルを別の段階へコピーする方法。ビルド用の道具などを実行用イメージへ持ち込まずに済む。最終イメージの内容や大きさは、ベースとコピーするもの、実行時の依存物によって変わる。
📌 このページのポイント
- 各FROMが新しい段階を始める
- ASで名前を付け、COPY --fromでファイルを渡せる
- ビルド用の道具を実行用イメージから除外できる
- 実行時に必要なライブラリや資源は残す必要がある
Dockerfileを何枚も作るの?
一つのDockerfileに複数のFROMを書くよ。それぞれが新しい段階を始める。ビルド用と実行用などに分け、必要な成果物を次の段階へ渡せるんだ。
何を持ち込まずに済むの?
例えばコンパイラーやビルド専用の道具を使って実行ファイルを作り、別のベースへ実行ファイルだけコピーできる。実行用のベースには、そのファイルが動くために必要なものを用意するよ。
前の段階からどう渡すの?
FROMにAS builderを付けて段階に名前を付け、COPY --from=builder /bin/app /bin/appのように指定する。名前がなくても最初の段階を0として番号で参照できるし、別のイメージからコピーする使い方もあるよ。
必ず小さく安全になる?
scratchに実行ファイルだけ置けばいい?
まとめ:ざっくりこれだけ覚えればOK!
「マルチステージビルド」って出てきたら「ビルド段階を分け、必要な成果物を次の段階へ渡す」と思えばだいたいOK!
📖 おまけ:英語の意味
「Multi-Stage Build」 = 複数段階のビルド
💬 multiは複数、stageは段階。前の段階からファイルを選んで渡す方法で、全段階の内容が自動的に最終イメージへ入るわけではないよ。