Docker はマシンの容量を食いやすいです。恐らくこれは仮想環境という差分管理してもなお大きくなりがちなものを多く取り扱えるのが原因です。少なくとも自分はそんな感じで雑に増えて雑に消してをよく繰り返しています。
Docker がマシンの容量をどれくらい使っているかを確認するdocker system df
というコマンドがあります。これを実行すると例えば次の様になります。
>docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 57 32 19.04GB 12.15GB (63%) Containers 42 10 299.1MB 297.9MB (99%) Local Volumes 29 14 2.639GB 208MB (7%) Build Cache 625 0 20.77GB 20.77GB
Disk Usage はこのコマンドの結果と同じものを見やすく表示し、容量空けを手軽に行えるようにショートカットが用意された Docker Desktop の拡張です。
導入は次の画像の赤丸部にある様に Add Extensions で拡張追加画面を開き、”Disk”と検索し、見つかった拡張を”Install”を実行することでなされます。
インストールが完了すると左側に Disk Usage のメニューができています。これをクリックして Disk Usage の画面を開くと次の画像の様になり Docker が各機能とカテゴリでどのくらい容量を使っているか一目でわかります。
Reclaimable space は使用中の Docker の機能を壊さずに空けられる容量の総量です。実際には未使用だけれども寝かせていることに意味のあるコンテナ、イメージ、キャッシュもあるので本当の意味で削除して問題ない容量はもういくらか少ないです。右側にある Reclaimable space ボタンを押すと次の様に Reclaimable space として扱われる範囲をざっくり削除するための操作と説明が表示されます。
- Stopped containers(停止済みのコンテナ)
- Unused images(使用していないイメージ)Images not used by any running or stopped containers(どのコンテナでも使われていないイメージ).
-
Dangling images(宙ぶらりんイメージ)
Images not tagged and not referenced by any container.(タグがなく、どのコンテナでも使われていないイメージ。イメージのビルド失敗で度々残るアレ) -
Build cache(イメージを生成する際のキャッシュ)
Deleting build cache will increase the time required to build images in the future.(キャッシュを削除すると再びイメージを生成する際により多くの時間が必要になります) -
Unused volumes(未使用のボリューム)
Removing a volume will permanently delete its contents.(ボリュームを削除するとその中身は永久に削除されます)
Volumes not used by any container(どのコンテナからも使用されていないボリュームが対象です)
雑に消してもそうそう問題にならないのは Build cache と Dangling images です。Build cache はあくまでキャッシュですのでやらかしても時間がかかるくらいで 済むのがほとんどです。稀に外部の何かに依存していてリンク切れなどでビルドの直しが必須になる時があります。Dangling images は無名のイメージをそのまま使う様な運用をしていなければ削除しても全く問題ないです。実は使ってたりすると再構築に時間がかかったりします。うかつに消すと特に危険なのが Unused volumes です。のちにデータベースの中身やログなどを参照したい機会が出てきた時、参照できなくなってしまうのでそういった時に困ります。保存しておく必要があるのであればボリュームを使わなくなる段階で Docker 外に素のファイルとして残しておいた方が無難です。
Disk Usage を導入することで気軽にコマンドを打つ必要もなく Docker の容量を管理できます。Docker Extension には他にも便利な拡張がそろっているので色々探してみるのも面白いです。