🐳
Docker image, containerのお掃除方法
概要
- 開発環境でDockerを利用していると知らない間にゴミが溜まってきたりするので掃除する方法を紹介します。
- Dockerに割り当てられているディスク容量が足りなくなったり、PC自体のディスク容量が不足すると
no space left on device
といったエラーが出るようになります。
掃除前
docker system df
コマンドでどのくらいのディスク容量を使っているかを表示できます。
% docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 95 53 55.52GB 36.55GB (65%)
Containers 571 0 6.355GB 6.355GB (100%)
Local Volumes 95 38 9.812GB 1.456GB (14%)
Build Cache 927 0 19.06GB 19.06GB
約89GB使っています。
掃除方法
必要に応じて実行してください。下に行けば行くほどより強力な掃除になります。
(コマンド体系はBSHです)
コンテナから参照されていないボリュームを削除
% docker volume rm $(docker volume ls -qf dangling=true)
1週間以上使っていないコンテナの削除をします。
% docker container prune --force --filter "until=168h"
1週間以上前に停止したコンテナの削除
% docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs docker rm
宙ぶらりんなイメージを削除
タグが打たれていなかったり、ビルド途中でエラーになってしまったイメージを削除します。
% docker rmi $(docker images -f "dangling=true" -q)
Build cacheの削除
ビルド途中の中間イメージの削除
% docker builder prune
全コンテナの削除
※実行注意
$ docker rm $(docker ps -aq)
全イメージの削除
※実行注意
以下のいずれかを実行します。同義です。イメージを消すためには関連するコンテナが存在しない状態でなければ消せません。
% docker rmi $(docker images -q)
% docker image prune
全てのデータを削除
※実行注意
停止中のコンテナ、ボリューム、ネットワーク、イメージを一括削除するコマンドです。
ほぼDockerのリセットと同義です。
% docker system prune
掃除後
% docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 61 5 37.26GB 36.23GB (97%)
Containers 13 0 78.64MB 78.64MB (100%)
Local Volumes 38 6 8.356GB 4.673GB (55%)
Build Cache 405 0 0B 0B
約35GBになりました。
まとめ
- 半年ぐらい運用した手元の環境ではDockerの使用容量が89GBから35GBになりました。
- 最後の3つのコマンド以外を実行しています。
- 以下のコマンドをシェルスクリプトにして、定期的に実行するとかしておけば良いかなと思います。
#!/usr/bin/env bash
set -Eeuo pipefail
docker volume rm $(docker volume ls -qf dangling=true)
docker container prune --force --filter "until=168h"
docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs docker rm
docker rmi $(docker images -f "dangling=true" -q)
docker builder prune
Discussion