Dockerfileを見ていて
Dockerfileでは、以下のように指定することが多い。
うん。割とどのDockerfileでもこうやっている。
RUN apt-get update && apt-get install -y \ aufs-tools \ automake \ build-essential \ curl \ dpkg-sig \ libcap-dev \ libsqlite3-dev \ lxc=1.0* \ mercurial \ reprepro \ ruby1.9.1 \ ruby1.9.1-dev \ s3cmd=1.1.* \ && apt-get clean \ && rm -rf /var/lib/apt/lists/*
apt-get update
でパッケージの更新を行って、
apt-get install
でパッケージのインストールを行って、
&& apt-get clean \ && rm -rf /var/lib/apt/lists/*
これが気になる。
なんだ。なんなんだ。
Dockerfile のベストプラクティス
ベストプラクティスにも付け加えられている。
付け加えると、apt キャッシュをクリーンにし、 /var/lib/apt/lits を削除することで、イメージのサイズを減らします。
引用:Dockerfileのベストプラクティス
なるほど、イメージのサイズを減らすのに役立っているらしい。
まぁ削除してるくらいだからね。
debian本家では以下のように言ってます。
APT の場合、基準になる Packages ファイルは Debian アーカイブミラーから提供されます。ですから、利用できるパッケージのデータベース内を検索する際に、毎回ネットワークを使うのはとても非効率的です。このため、APT は (/var/lib/apt/lists/ に) データベースのコピーを保存し、このコピーを使って検索します。同様に、/var/cache/apt/archives/ にはこれまでにダウンロードしたパッケージのキャッシュを保存しています。これは削除後の再インストール時に同じファイルをダウンロードするのを避けるためです。
引用:Debian 管理者ハンドブック
つまり消していたファイルはキャッシュです。データベースを使用する際に毎(回ネット接続しなくて済むようにパッケージデータベースのリストとインストール済みのパッケージをローカルに保存してあるんですね。
apt-get clean
では /var/cache/apt/archives
にキャッシュされている全てのパッケージを削除、
rm -rf /var/lib/apt/lists/*
では /var/cache/apt/list
にキャッシュされている全てのパッケージリストを削除します。
自分の環境では。
試しに自分のWSL環境でのキャッシュのサイズを見てみましょう。
$ du -Sh /var/lib/apt/lists/ 114M /var/lib/apt/lists/
$ du -Sh /var/cache/apt/archives/ 2.3G /var/cache/apt/archives/
うん。結構でかい。
CentOSの場合
CentOSなあなたはパッケージ管理をyum
で行っているはずです。
yumの場合はキャッシュはどこにあるのかといいますと、/var/cache/yum/
以下になります。
パッケージのインストール後これを削除するには、yum install
の後に
&& rm -rf /var/cache/yum/* \ && yum clean all
を繋げてあげれば良いみたいです。
以上、今や割と常識らしかったDockerfileのまめちでした。