Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Know what you want - Dockerfile 7GB to 1GB

2025年09月16日に「Dev.to」が公開したITニュース「Know what you want - Dockerfile 7GB to 1GB」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Dockerイメージのサイズが7GBと肥大化。原因は、機械学習ライブラリPyTorchのインストールで不要なGPUサポートも含まれたためだった。CPU専用版を指定してインストールし直した結果、サイズは1GBに劇的に削減された。アプリ実行環境最適化の重要性を示す。

出典: Know what you want - Dockerfile 7GB to 1GB | Dev.to公開日:

ITニュース解説

Dockerは、アプリケーションとその実行環境をひとまとまりにした「コンテナ」という形で管理し、どんな環境でも同じように動かせるようにする技術だ。このコンテナを作るための設計図が「Dockerイメージ」と呼ばれるもので、OSやプログラム、ライブラリ、設定ファイルなど、アプリケーションの実行に必要なすべてが含まれている。Dockerイメージが大きすぎると、作成に時間がかかったり、ネットワークを通じて共有するのに時間がかかったり、サーバーのストレージを無駄に消費したりと、様々な問題が発生する。そのため、Dockerイメージのサイズをできるだけ小さく保つことは、効率的なシステム運用において非常に重要な課題となる。

今回紹介する事例は、まさにこのDockerイメージのサイズ問題に直面し、その解決に取り組んだエンジニアの話だ。彼はOpenAIのCLIPモデルという、テキストと画像を関連付けるAIモデルをGoogle Kubernetes Engine (GKE) というクラウド環境で動かそうとしていた。そのために、必要なプログラムやライブラリをDockerコンテナにまとめていた。具体的には、機械学習の基盤となるtorchtorchvision、Web APIを構築するためのfastapiuvicorn、画像処理ライブラリのpillowなど、多くのPythonライブラリをコンテナに含める必要があった。

しかし、Dockerイメージをビルドしてみると、そのサイズが約7GBにもなってしまった。彼は当初、せいぜい2GB程度になるだろうと予想していたため、この7GBというサイズは非常に大きな問題だった。なぜこんなに大きくなってしまったのか、その原因を詳しく調べていくと、意外な事実が判明した。

原因は、torchtorchvisionといったPyTorch関連のパッケージのインストール方法にあった。これらのライブラリは、機械学習の計算を高速化するために、通常はNVIDIA製のGPU(グラフィックス処理ユニット)で動作するCUDAという技術に対応したバージョンが提供されている。しかし、今回のプロジェクトでは、GPUではなく通常のCPU(中央演算処理装置)でCLIPモデルを動かす予定だった。つまり、GPU/CUDAのサポートは全く必要なかったのだ。

一般的なインストール方法でPyTorchを導入すると、特に指定がなければGPU/CUDAサポートが含まれたバージョンがデフォルトでインストールされてしまうことがある。このGPU/CUDA関連のファイルやライブラリは非常に大きく、それらが不必要なままDockerイメージに含まれてしまった結果、イメージサイズが7GBという巨大なものになってしまったのだ。

この問題を解決するため、彼はrequirements.txtという、Pythonプロジェクトが必要とするライブラリをリストアップしたファイルを修正した。修正後のファイルでは、torchtorchvisionのバージョン指定に「+cpu」という記述を追加し、明示的にCPU版をインストールするように指示したのだ。さらに、CPU版のPyTorchパッケージが置かれている場所を指し示すために、「-f https://download.pytorch.org/whl/cpu/torch_stable.html」というオプションも追加した。これにより、必要なCPU版のPyTorchライブラリだけが正確にインストールされるようになった。

このrequirements.txtの修正後、Dockerイメージを再度ビルドしたところ、驚くべきことにそのサイズは約1GBにまで劇的に削減された。たった数行の変更で、イメージサイズが約7分の1にまで小さくなったのだ。これは、不要なGPU/CUDA関連の巨大なファイルを完全に排除できたおかげだ。

彼はさらに、イメージサイズを小さくする方法を探った。たとえば、インストールされたPythonパッケージの中に含まれるテストコードやサンプルコードのディレクトリは、アプリケーションの実行には不要な場合が多い。これらを削除することで、さらに約50MBから60MB程度の容量を削減できることがわかった。実際にこれらの不要なファイルを削除した結果、イメージサイズは1.07GBから1.01GBへと、わずかながらもさらに縮小した。

さらに踏み込んだ最適化として、Pythonのパッケージ管理ツール(pipなど)で一括インストールするのではなく、サイトパッケージ(Pythonのライブラリが保存される場所)から、必要なファイルだけを選んで個別にDockerイメージにコピーするという方法もある。この手法は手間がかかるが、よりアグレッシブに不要なファイルを除外し、イメージサイズをさらに削減できる可能性がある。

この事例からシステムエンジニアを目指す初心者が学ぶべき重要な教訓はいくつかある。一つは、Dockerイメージのサイズは決して軽視できない要素であるということだ。小さく保つことで、開発効率やデプロイの速度、運用コストに大きな影響を与える。二つ目は、自分が本当に必要なものだけを厳選して含めることの重要性だ。特に機械学習系のライブラリでは、GPUサポートの有無がイメージサイズに大きく影響するため、自分の環境や要件に合わせて適切なバージョンを選択する必要がある。そして三つ目は、問題を疑い、その原因を深く掘り下げて探求する姿勢だ。今回のように、デフォルトの設定が必ずしも自分のニーズに合っているとは限らない。一つ一つの設定や依存関係に意識を向けることで、より効率的で堅牢なシステムを構築するスキルが身につくのだ。これらの学びは、今後のシステム開発において大いに役立つだろう。

関連コンテンツ