Dockerのoverlay2ディレクトリが肥大化してしまった場合の対処法

Dockerをバシバシ使っていると知らぬ間にディスク使用率が100%に!!

その原因として「/var/lib/docker/overlay2」の中身が知らぬ間に肥大化してしまっていることが多いようです(勝手には消えてくれないようです)。しかし、そのフォルダの中身を削除したいと頭に浮かぶかもしれませんが、安易に削除すると何が起こるかわかりません。。。

色々調べた結果、Dockerコマンドで安全にフォルダの中身を削除できることがわかりました。

Docker使用容量確認

まずはDockerが使っているディスクサイズを確認します。ここで出てくる「RECLAIMABLE」とは「再利用できる」と言う意味で、Docker的には「現在使われていない(から再利用できる)」イメージやコンテナの容量を表しています。(公式ヘルプ

$ sudo docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              15                  4                   3.728GB             1.904GB (51%)
Containers          8                   0                   543MB               543MB (100%)
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

ディスク容量確保

次に、停止しているコンテナ、使われていないネットワーク、タグ付けされていないイメージやビルドキャッシュを削除します。(公式ヘルプ

$ sudo docker system prune
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

Are you sure you want to continue? [y/N] y
Deleted Containers:
xxx

Deleted Images:
deleted: sha256:xxx

Total reclaimed space: 2.368GB

約2.4GB削除されました!

さらに、実験的に全てのイメージを削除します。

$ sudo docker system prune --all
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:xxx

Total reclaimed space: 1.904GB

約1.9GBも削除されました!(しかし、ここまで削除するとコンテナビルドのキャッシュが全て消えてしまい、再度ビルドする際にキャッシュが効かなくなってしまうので注意です)

結果確認

全て削除したので使用量ゼロになりました!

$ sudo docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              0                   0                   0B                  0B
Containers          0                   0                   0B                  0B
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

容量が逼迫してしまったという緊急時に役立つコマンドかと思います。しかし100%になってしまうとプロセスの動作に支障を来すので、そのような事態になる前に定期的に実行した方がいいかもしれませんね。。。