1. ホーム

[解決済み】Dockerのコンテナイメージが大きいのはなぜですか?

2022-04-13 13:52:03

質問

FedoraからDockerfileで簡単なイメージを作りました(初期320MB)。

Nano(この1MBサイズの小さなエディタ)を追加し、イメージのサイズは530MBに上昇しました。その上にGitを追加して(30数MB)、イメージのサイズは830MBに急上昇したんだ。

正気の沙汰とは思えませんね。

コンテナのエクスポートとインポートを試して、履歴/中間画像を削除しています。この作業で25MBまで節約できましたが、現在、私の画像サイズは804MBです。また、1つのコンテナで多くのコマンドを実行することも試みました。 RUN が、やはり最初の830MBと同じになってしまいました。

Dockerを使う価値があるのかどうか、疑問があります。つまり、ほとんど何もインストールしてないのに、1GBオーバーしているんです。もし、データベースなどの重大なものを追加することになれば、ディスク容量が足りなくなる可能性があります。

画像のサイズがとんでもなく大きいことに悩んでいる方はいらっしゃいますか?どのように対処していますか?

私のDockerfileが恐ろしく正しくないのでなければ?

FROM fedora:latest
MAINTAINER Me NotYou <[email protected]>
RUN yum -y install nano
RUN yum -y install git

が、ここで何が問題なのか、想像がつきません。

どのように解決するのか?

rexposadas が言ったように、イメージはすべてのレイヤーを含み、各レイヤーはあなたがインストールしたものに対するすべての依存関係を含みます。また、ベースとなるイメージ(例えば fedora:latest は非常に素っ気ないものになりがちです。インストールしたソフトウェアが持っている依存関係の数に驚くかもしれません。

を追加することで、インストールを大幅に小さくすることができました。 yum -y clean all を各行に追加してください。

FROM fedora:latest
RUN yum -y install nano && yum -y clean all
RUN yum -y install git && yum -y clean all

各RUNについて、レイヤーがコミットされる前にそれを行うことが重要です。さもないと、削除しても実際にはデータは削除されません。そうしないと、削除しても実際にデータは削除されません。つまり、ユニオン/コピーオンライトファイルシステムでは、実際のデータはすでに下位レイヤーにコミットされているため、最後にクリーニングしてもファイルシステムの使用量はあまり減りません。これを回避するためには、各レイヤーでクリーニングを行う必要があります。

$ docker history bf5260c6651d
IMAGE               CREATED             CREATED BY                                      SIZE
bf5260c6651d        4 days ago          /bin/sh -c yum -y install git; yum -y clean a   260.7 MB
172743bd5d60        4 days ago          /bin/sh -c yum -y install nano; yum -y clean    12.39 MB
3f2fed40e4b0        2 weeks ago         /bin/sh -c #(nop) ADD file:cee1a4fcfcd00d18da   372.7 MB
fd241224e9cf        2 weeks ago         /bin/sh -c #(nop) MAINTAINER Lokesh Mandvekar   0 B
511136ea3c5a        12 months ago                                                       0 B