docker left space というメッセージが表示されたので不要なリソースを削除したときのメモ

Dockerは使用していないイメージとかコンテナとかボリュームも、念の為取っておくという方針で開発されているので、ほっとくとファイルをどんどん貯めていってストレージを圧迫してしまう。

Docker for mac を使用している場合、設定画面のResourcesにあるVirtual disk limitで使用できるストレージの上限を設定することができ、dockerが設定以上にストレージを使おうとすると、 空いてるスペースがない旨を説明するメッセージを出力する。(僕の場合は、 docker left spaceと出力された)

このメッセージが出た場合は、Docker for mac で設定した上限を上げるか、Dockerが用意している使用していないリソースを解放するためのコマンドを使ってリソースを削除する。

Dockerが使用している各種リソースの状況

❯ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          6         6         6.655GB   23.98MB (0%)
Containers      6         5         107MB     1.627kB (0%)
Local Volumes   37        7         66.7GB    677.2MB (1%)
Build Cache     48        0         2.2GB     2.2GB

全ての使用していないリソースを削除

使用していないイメージというのは、タグが設定しないし、コンテナが参照していないものことを指しています。—volumes オプションをつけることでデフォルトでは削除されないボリュームも削除されます。

❯ docker system prune --volumes

上記のコマンドで削除対象になるイメージはダングリングイメージと呼ばれるリポジトリ名もタグも設定されていないイメージだけで、使用中のコンテナが参照していないイメージ(未使用のイメージ)は残ります。未使用のイメージも一緒に削除する場合は、下記のようにaオプションをつけてコマンドを実行します。

❯ docker system prune -a --volumes

Dangling Images(ダングリングイメージ)が作られるタイミング

新しいイメージをビルドしたときに設定したリポジトリ名とタグで既に同じリポジトリ名とタグのイメージがある場合、新しいビルドに置き換えられ既にあったイメージは<none>:<none>というイメージとして残されます。これがDangling Imagesとなります。

また、ビルドプロセスで使用された中間イメージもDangling Imagesとして残ります。このDangling Imagesはそのまま放置しておくと消えずに残るので、ストレージが残り少ない場合は、pruneコマンドを使用して削除できます。

https://docs.docker.jp/config/pruning.html