Dockerのディスク掃除
ビルドを繰り返すサーバでディスク残量の警告が出た。犯人がDockerのイメージやログの蓄積らしいので、安全に容量を取り戻したい。
手順
docker system dfイメージ・コンテナ・ボリューム・ビルドキャッシュがそれぞれ何GB使っているかの内訳を見る。まず敵の正体を数字で把握する。docker system df -v-vで個別の内訳まで表示する。どのイメージが大きいか、どのボリュームが使われていないかが具体的に分かる。docker image prune -a --filter until=168h1週間以上前の未使用イメージだけを削除する。--filterで期間を絞ると「消しすぎ」を防げる。実行前に対象一覧の確認プロンプトが出る。docker builder pruneビルドキャッシュを削除する。CIサーバではここが数十GBに膨らんでいることが多い。sudo du -sh /var/lib/docker/containers/*/*-json.log | sort -rh | headコンテナごとのログファイルの肥大を確認する。ログが数GBあるならローテーション未設定が原因。sudoedit /etc/docker/daemon.json恒久対策として log-driver: json-file と log-opts の max-size: 10m, max-file: 3 を設定し、Docker再起動で以後のログ肥大を防ぐ。既存コンテナには再作成後に効く。⚠
注意docker system prune --volumesは未使用「扱い」のボリュームごと消すため、停止中DBのデータを失う事故が起きやすい。ボリュームの削除だけは一覧を目視してから個別に行うこと。