docker-compose build、docker-compose up など日常的にdockerを使ってるとサーバーにゴミが溜まるのは普通の事です。最初は気づかないのですが、ゴミが溜まりすぎてsshでも接続する容量さえなくなるとサーバーにアクセスできなくることもあります。私はありました(あの時は変な汗が止まらんかった)
溜まる理由は Docker の親切心です。キャッシュもボリュームも「いつか再利用するかもしれない」前提で捨てずに残されてますので、雪だるま式にディスクを逼迫していくということです。
ディスクにゴミが溜まる理由
- イメージのレイヤー蓄積
docker-compose buildで同じタグを上書きしても、古いイメージは”別ID”として残るため容量が増えます。 - ボリュームの残存
コンテナを削除しても、関連してたボリュームは自動で削除されず、特に名前付きボリュームはきっちり削除するまで残ります。 - ビルドキャッシュの蓄積
docker-compose buildするたびに、キャッシュが作成されて再利用され便利ですが、古いキャッシュは残ります。
つまり、自動では大体消えませんので、放置すれば必ずディクスが無駄だらけになります。
というわけで
dockerでサーバーに溜まったごみを削除してクリーンアップする方法
Docker のディスク使用状況を表示
|
1 |
docker system df |
以下のようにディクスの使用状況がわかります。今回だとLocal Volumesが94%とImagesが78%とかなりの無駄が溜まってます。
|
1 2 3 4 5 |
TYPE TOTAL ACTIVE SIZE RECLAIMABLE 16 4 12.39GB 9.67GB (78%) Containers 4 4 291kB 0B (0%) Local Volumes 95 5 21.42GB 20.17GB (94%) Build Cache 75 0 813.4MB 813.4MB |
不要なものを削除する前に、何が削除されるか確認しましょう。
未使用イメージ確認
|
1 |
docker images -f "dangling=true" |
未使用ボリューム一覧
|
1 |
docker volume ls -f dangling=true |
上記を叩いて、変な表示がなければ以下を実行して無駄を削除していいと思います。
無駄なゴミをクリーンアップするコマンド
ビルドキャッシュを削除
|
1 |
docker builder prune |
未使用イメージを削除
|
1 |
docker image prune |
未使用ボリューム削除
|
1 |
docker volume prune |
定期的なメンテナンスはしておきましょう。
最低でも月一回程度は docker system df して溜まってないか確認しておきましょう。
自動化する場合、cronジョブを設定する方法がありますが、若干怖い…