Dock Stay
イメージを掃除する - docker images / docker system prune の使い方・オプション・サンプル

イメージを掃除する - docker images / docker system prune

ローカルのイメージ一覧と、使われていないリソースの一括削除。ビルドを繰り返していると数十 GB に膨らむので、定期的に掃除する。

概念図

docker images / docker system prune diagram

構文

bash
docker images [OPTIONS] [REPOSITORY[:TAG]]
docker system prune [OPTIONS]

実例

リポジトリ名とサイズを表形式で表示

bash
docker images --format "table {{.Repository}}:{{.Tag}}\t{{.Size}}"

確認なしで停止コンテナ・ぶら下がりイメージ等を削除

bash
docker system prune -f

使われていないイメージとボリュームまで含めて全削除

bash
docker system prune -a --volumes

イメージ一覧と容量

docker images はローカルのイメージを表示する。

REPOSITORY、TAG、IMAGE ID、CREATED、SIZE の列で、どのタグがどれだけディスクを食っているか一目でわかる。

-a を付けると中間レイヤーも表示されるが、実運用でそこまで見ることは少ない。

より正確な使用量は docker system df で確認する。

Images、Containers、Local Volumes、Build Cache の 4 カテゴリで TOTAL / ACTIVE / RECLAIMABLE を出す。

RECLAIMABLE は prune で回収できる量。

docker system df -v で個別のボリューム・イメージの内訳まで出せる。

bash
docker images
docker system df
docker system df -v

`docker system prune` で掃除

docker system prune は停止済みコンテナ、使われていないネットワーク、ぶら下がり(dangling)イメージ、未使用のビルドキャッシュをまとめて削除する。

-a を追加すると、どのコンテナからも参照されていないイメージまで消す(積極的に空き容量を作りたいとき向け)。

--volumes でボリュームも対象になる。

削除される「ぶら下がりイメージ」とは、タグが剥がれた(例: 同じタグで再ビルドした旧イメージ)ものを指す。

これは大半のケースで不要。

一方 -a で消えるのは「どのコンテナからも参照されていないイメージ」なので、開発中に docker run で一度も起動していないイメージが含まれる。

その場合、次回 pull 時間が延びる点に注意。

bash
docker system prune
docker system prune -a
docker system prune -a --volumes

自動削除の CI への組み込み

セルフホスト GitHub Actions Runner や Jenkins エージェントで Docker ビルドを繰り返すと、ディスクが即座に枯渇する。

ジョブの最後に docker system prune -f --volumes を仕込むか、ホストの cron で毎晩実行するのが定番。

--filter "until=24h" を付けると 24 時間より古いものだけ消せるので、直近のキャッシュは残せる。

Kubernetes 上の Runner を使う場合は、コンテナ内からホストの Docker を触る dind(Docker in Docker)のレイヤがホストに蓄積する点に注意。

containerd レベルでも crictl rmi --prune 等が必要になる。

どちらにせよ「気づいたら 500GB 埋まっていた」を防ぐには監視とアラートを設定する。

bash
# GitHub Actions self-hosted cleanup step
- name: Prune Docker
  if: always()
  run: docker system prune -f --volumes --filter "until=24h"

関連トピック