LinuCレベル3 プラットフォームスペシャリスト コンテナ技術の利用 問17
コンテナ技術の利用/コンテナの操作と管理Dockerfileのマルチステージビルドを使う主な目的として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「コンテナ技術の利用」に対応。実際の試験問題ではありません)
- Aマルチステージビルドを使うと、複数のDockerfileを1つのファイルにまとめてビルドの依存関係を一元管理できる
- Bマルチステージビルドでは各ステージが並列にビルドされるため、シングルステージよりビルド時間が自動的に短縮される
- Cビルドに必要なコンパイラや依存ライブラリをビルドステージに閉じ込め、最終イメージにはビルド成果物だけをコピーすることでイメージサイズを削減できる
- Dマルチステージビルドはdocker buildではなく、docker compose build コマンドでのみ使用できる
正解:C
解説
マルチステージビルドでは、Dockerfile に複数の FROM 命令を書くことで複数のビルドステージを定義できます。典型的な使い方は、最初のステージ(ビルダー)でコンパイラや依存ライブラリを用いてアプリをビルドし、2 番目のステージでは最小限のベースイメージ(例: alpine, distroless)から始めて COPY --from=builder でビルド成果物だけをコピーする方法です。これにより、コンパイラや中間ファイルを含まない軽量な最終イメージが作成できます。docker build コマンドで通常通りビルドでき、--target オプションで途中のステージまでビルドすることも可能です。
選択肢ごとの解説
- A誤り。マルチステージビルドは 1 つの Dockerfile 内で複数の FROM 命令を使いビルド工程を分ける機能です。複数の Dockerfile を統合する機能ではありません。
- B誤り。依存関係があるステージは順番に実行されます。BuildKitを使う場合でも、並列化は独立したステージに限られ、マルチステージビルドの主目的はビルド依存ツールを最終イメージに含めないことによるイメージサイズの削減です。
- C正しい。ビルドツール類をビルドステージに閉じ込め、最終ステージへは成果物だけをコピーすることで、不要なファイルを含まない軽量なイメージを作成できます。
- D誤り。マルチステージビルドは docker build コマンドで使用できます。Dockerfile に FROM ... AS name の形で複数のステージを記述して通常どおりビルドします。