最終更新
リンドくん
たなべ先生、Dockerでイメージを作ったら、すごく大きくなっちゃいました...
たなべ
それ、よくあるんだよね。でもマルチステージビルドを使えば、イメージを10分の1くらいに小さくできるよ!
Dockerを使い始めると、コンテナイメージのサイズが大きくなりすぎて困ることがあります。
開発用のツールまで全部入れてしまうと、数GBになることも珍しくありません。
この問題を解決するのがマルチステージビルドです。
ビルドに必要なツールと、実行に必要なファイルを分けることで、イメージサイズを大幅に削減できます。
この記事では、マルチステージビルドの基本から実践的な使い方まで、初心者の方にもわかりやすく解説していきます。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
リンドくん
マルチステージビルドって、どういう仕組みなんですか?
たなべ
簡単に言うと、1つのDockerfileの中で複数の工程を分ける仕組みだよ。
最初の工程でビルドして、次の工程では実行に必要なファイルだけをコピーするんだ。
マルチステージビルドは、Dockerfileの中で複数のFROM命令を使う方法です。
これにより、最終的なイメージには実行に必要な最小限のファイルだけが含まれます。
マルチステージビルドを使うメリットはこちらです。
特にクラウド環境では、イメージが小さいほどコストも時間も節約できます。
リンドくん
実際にはどう書けばいいんですか?
たなべ
まずは一番シンプルな例から見てみようか。
ポイントは以下の3つです。
Node.jsの場合は、開発用の依存関係を除外して、ビルド済みファイルだけをコピーします。
実際にどれくらいサイズが変わるか見てみましょう。
イメージサイズ: 約1.2GB
イメージサイズ: 約120MB
10分の1以下になりました!
WORKDIRを考慮してパスを指定しましょう。
実行に必要なライブラリを忘れずに。
変更の少ないファイルを先にコピーすると、キャッシュが効きやすくなります。
リンドくん
意外とシンプルですね!早速試してみます!
たなべ
そうだね!まずは2ステージから始めて、慣れてきたら最適化していくといいよ。
マルチステージビルドを使えば、Dockerイメージを大幅に軽量化できます。
重要なポイントをおさらいしましょう。
マルチステージビルドは、最初は難しく感じるかもしれませんが、基本を押さえれば誰でも使えます。ぜひ自分のプロジェクトで試してみてください。