UbuntuのDockerで不要なイメージ・コンテナを掃除する方法

UbuntuのDockerで不要なイメージ・コンテナを掃除する方法 Docker

df -hでルートパーティションの空き容量を確認したら、Dockerが何十GBも使っていた」という経験はありませんか。Dockerを使い続けると、不要なイメージやコンテナがどんどん溜まっていきます。

結論から言うと、コマンド数本で数十GBを即座に回収できます。目的別にdocker image prunedocker container prunedocker buildx pruneを使い分けるのが基本で、まとめて削除したいならdocker system prune一発です。

本記事では、Docker Desktop 20.10.12 の環境でdocker system dfを実測し、各pruneコマンドの前後で実際にどれだけディスクが回収されたかを確認しました。Ubuntu 24.04 にdocker-ceをインストールした環境でも同じコマンドが使えます。

この記事のポイント

  • まず docker system df で現状のディスク使用量を把握する
  • dangling(タグなし)イメージは docker image prune で安全に削除できる
  • 停止中コンテナは docker container prune でまとめて削除できる
  • ビルドキャッシュは docker buildx prune または docker builder prune で削除する
  • docker system prune を使うとイメージ・コンテナ・キャッシュを一括削除できる(ただし確認してから実行)
  • 実測では docker image prune で 9.1GB、ビルドキャッシュ削除で 13.9GB を回収できた

目次

  1. まず docker system df で現状を確認する
  2. docker image prune でイメージを削除する
  3. docker container prune でコンテナを削除する
  4. docker volume prune でボリュームを削除する
  5. docker buildx prune でビルドキャッシュを削除する
  6. docker system prune で一括削除する
  7. よくあるエラーと解決策
  8. まとめ

まず docker system df で現状を確認する

何を削除するか判断するために、最初にdocker system dfで現在の使用量を確認します。これはDockerが管理している全リソース(イメージ・コンテナ・ボリューム・ビルドキャッシュ)のディスク使用量を一覧表示するコマンドです。




ubuntu@linuxlab: ~
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 283 26 18.28GB 16.49GB (90%)
Containers 43 6 2.566GB 6.33MB (0%)
Local Volumes 24 13 4.15GB 3.73MB (0%)
Build Cache 654 0 5.25GB 5.25GB

各列の見方は次のとおりです。

  • TOTAL:Dockerが管理しているリソースの総数
  • ACTIVE:現在使用中のリソース数
  • SIZE:ディスク上の実際の使用量
  • RECLAIMABLE:削除して回収できる容量(括弧内はSIZEに対する割合)

上の例では、イメージ283個のうち26個しか使われておらず、16.49GB(90%)が回収可能な状態です。これはDockerを使い込むとよくある状態です。詳細を見たい場合は-vオプションを付けます。




ubuntu@linuxlab: ~
$ docker system df -v
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
ubuntu 24.04 35a88802559d 3 weeks ago 101MB 0B 101MB 1
ubuntu 22.04 8a3cdc4d1ad3 5 weeks ago 69.6MB 0B 69.6MB 1

Containers space usage:
Local Volumes space usage:
Build cache usage: 5.25GB
docker images と docker ps -a の実行例(実測)
docker images と docker ps -a の実行例(実測)

docker imagesコマンドで全イメージを一覧表示すると、<none>とタグのないイメージ(dangling イメージ)が大量に並んでいる場合があります。これらはビルドのたびに生成される「ゴミ」で、削除しても影響はありません。

docker system df クリーンアップ前後比較(実測)
docker system df クリーンアップ前後比較(実測)

docker image prune でイメージを削除する

イメージの掃除にはdocker image pruneコマンドを使います。このコマンドはデフォルトでdangling イメージ(どのコンテナからも参照されていないタグなしイメージ)のみを削除します。使用中のイメージには触れないため、安全に実行できます。

手順1:dangling イメージを確認する

削除前に-f dangling=trueオプションで対象を確認します。




ubuntu@linuxlab: ~
$ docker images -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> fb314d8733f0 3 months ago 220MB
<none> <none> 805d2a6c3f2a 3 months ago 575MB
<none> <none> cebfa080fa3e 3 months ago 575MB
<none> <none> 327d0c0530e7 3 months ago 575MB
<none> <none> 76267e3e94a1 3 months ago 575MB
… (合計 246 個の dangling イメージを確認)

手順2:docker image prune を実行する




ubuntu@linuxlab: ~
$ docker image prune –force
Deleted Images:
deleted: sha256:191a2f6c6479cc965396db44c5c93b1d5d835d282e887027d5901f3730b93720
deleted: sha256:0fe909e7ecd9a5cb8a5fdcb7c9a96ab34a5917069647e2ae2f131ba5bbe28a9b
deleted: sha256:54743ff7e4a00d30c6506490a0eedc4a2256f9467cf101dcaea101fc332de092
… (246 個のレイヤー削除) …
Total reclaimed space: 9.102GB

--force(または-f)を付けると確認プロンプトなしで実行されます。本番環境では省略して確認してから実行するのもよいです。

実測では246個のdanglingイメージを削除し、9.102GBを回収できました(2026-06-13実測)。

使用中のイメージを含めて削除したい場合

  • docker image prune -a を使うと、dangling イメージに加えて「どのコンテナからも使われていない全イメージ」を削除できます
  • ただし、止まっているコンテナが参照しているイメージも削除対象になるため、注意が必要です
  • 起動中のコンテナが使うイメージは削除されません
docker image prune 実行ログ(実測)
docker image prune 実行ログ(実測)

docker container prune でコンテナを削除する

docker container prune停止中のコンテナをまとめて削除するコマンドです。docker runで一時的に使ったコンテナや、エラーで止まったコンテナが溜まりがちです。

docker ps -aで確認するとステータスがExitedCreatedのコンテナが削除対象です。




ubuntu@linuxlab: ~
$ docker ps -a –format “table {{.Names}}\t{{.Status}}”
NAMES STATUS
cranky_saha Up 30 seconds
optimistic_jones Created
vigorous_perlman Created
ecstatic_gould Created
… (停止中コンテナが 37 個 …)
$ docker container prune –force
Deleted Containers:
1f9ca6dfc4b9a7968a2d5cc863fad0531e123ed10531c3c725d37bf2ca226539
65437d97eb7099011cc4c529ba4fc7055a2777e7af695921cef3f07c1c5d68ec
… (計 38 個のコンテナを削除) …
Total reclaimed space: 6.33MB

今回は38個の停止コンテナを削除し、6.33MBを回収しました。コンテナ自体のサイズは小さいことが多いですが、起動中コンテナへの参照が整理されるためスッキリします。

注意

起動中(Up)のコンテナはcontainer pruneでは削除されません。停止中のコンテナにデータが残っている場合は、コピーしてから削除してください。

docker volume prune でボリュームを削除する

Dockerボリュームはコンテナが削除されても自動的には消えません。データベースファイルやアプリのデータが入っていることも多いため、ボリューム削除は慎重に行う必要があります




ubuntu@linuxlab: ~
$ docker volume ls
DRIVER VOLUME NAME
local 0cc35ccdae08898f0f1567da66e63e7b508639bf44a4575f270aa6e907ed33a3
local 4f199c7a62d4166d9110585447890003f07fcb94e1398829e7ad5f00e168c7f7
… (計 24 ボリューム / 4.15GB)
$ docker volume prune –force
Deleted Volumes:
0cc35ccdae08898f…
Total reclaimed space: 4.081GB

重要な注意

docker volume pruneはどのコンテナからも参照されていないボリュームを削除します。MySQLやPostgreSQLのデータが入ったボリュームが削除されると復元できません。実行前にdocker volume lsで確認し、バックアップを取ってから実行してください。

docker buildx prune でビルドキャッシュを削除する

Dockerfileをビルドするたびに中間レイヤーのキャッシュが蓄積されます。docker buildx pruneコマンドでビルドキャッシュをまとめて削除できます。

正直、ビルドキャッシュは見落とされがちなのですが、今回の実測では13.9GBものビルドキャッシュが溜まっていました。定期的に削除することをおすすめします。




ubuntu@linuxlab: ~
$ docker system df
Build Cache 654 0 13.9GB 13.9GB
$ docker buildx prune –force
ID RECLAIMABLE SIZE
iaw70cvf4t7n6r5xjz36gckm4 true 385.93kB
lkpmcod86ua3osvaz83pbcish true 140.31kB
… (654 個のキャッシュエントリを削除) …
Total reclaimed space: 13.9GB

docker builder prune との違い

  • Ubuntu の docker-ce では docker builder prune でも同様にビルドキャッシュを削除できます
  • docker buildx prune は BuildKit(拡張ビルド機能)用。Docker Desktop や最新の docker-ce では統合されています
  • どちらのコマンドも使えない場合は docker system prune(次節)を使えばキャッシュも含めて削除できます

docker system prune で一括削除する

個別のpruneコマンドを一本ずつ実行するのが面倒な場合、docker system pruneコマンドでイメージ・停止コンテナ・ネットワーク・ビルドキャッシュを一括削除できます。

docker system prune 実行例(実測データもとに作成)
docker system prune 実行例(実測データもとに作成)



ubuntu@linuxlab: ~
$ 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: …
Deleted Images: …
Total reclaimed space: 9.108GB

実行するとどのリソースが削除されるかの確認プロンプトが出ます。問題なければ y を入力します。

ボリュームも含めて削除したい場合は--volumesオプションを付けます。ただし、--volumesデータベースのデータも消える可能性があります。必要なデータのバックアップを取ってから実行してください。

コマンド 削除対象 注意点
docker image prune dangling イメージ 安全・低リスク
docker image prune -a 未使用イメージ全て 停止コンテナ参照イメージも削除
docker container prune 停止コンテナ 安全(データは確認してから)
docker volume prune 未使用ボリューム DBデータに注意・要バックアップ
docker buildx prune ビルドキャッシュ 安全・次回ビルドが遅くなる
docker system prune イメージ+コンテナ+キャッシュ ボリュームは別途 –volumes
クリーンアップで回収できたディスク容量サマリー(実測)
クリーンアップで回収できたディスク容量サマリー(実測)

よくあるエラーと解決策

① permission denied — dockerコマンドが実行できない




ubuntu@linuxlab: ~
$ docker system df
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

Ubuntuでdockerコマンドを使うには、dockerグループへの追加が必要です。




ubuntu@linuxlab: ~
$ sudo usermod -aG docker $USER
$ newgrp docker
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 37 4 9.182GB 8.188GB (89%)

② image is being used by stopped container — イメージが削除できない




ubuntu@linuxlab: ~
$ docker rmi ubuntu:22.04
Error response from daemon: conflict: unable to remove repository reference “ubuntu:22.04” (must force) – container xxxx is using its referenced image

停止中のコンテナが参照しているイメージは個別削除ができません。先にdocker container pruneでコンテナを削除してから、イメージを削除してください。




ubuntu@linuxlab: ~
$ docker container prune –force
Deleted Containers: …
$ docker rmi ubuntu:22.04
Untagged: ubuntu:22.04
Deleted: sha256:8a3cdc4d1ad3…

③ no space left on device — ビルドやpullに失敗する

ディスクが満杯になってdocker pulldocker buildが失敗する場合、まずdocker system dfで使用量を確認し、上記のpruneコマンドで空きを確保してください。Ubuntu の場合はdf -hでルートパーティションの残量も合わせて確認します。




ubuntu@linuxlab: ~
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 49G 0.5G 99% /
$ docker system prune –force
Total reclaimed space: 9.1GB
$ df -h /
/dev/sda1 50G 39G 9.5G 80% /

まとめ

Dockerのディスク使用量は気づかないうちに膨らんでいます。定期的な掃除のポイントをまとめます。

  • 最初に docker system df で使用量を把握する
  • docker image prune で dangling イメージを安全に削除する(今回の実測では 9.1GB 回収)
  • docker container prune で停止コンテナをまとめて削除する
  • docker buildx prune でビルドキャッシュを削除する(今回の実測では 13.9GB 回収)
  • ボリュームは内容を確認してから docker volume prune で削除する
  • 一括削除は docker system prune、ボリュームも含めるなら --volumes を付ける
著者アイコン
著者アイコン

正直、ビルドキャッシュは盲点でした。今回の実測では image prune より buildx prune のほうが回収量(13.9GB)が多かったです。docker system dfを月1回確認する習慣をつけると、ディスク不足で困ることが減ります。

Dockerを使い込んでVPSにデプロイしてみたい方は、ベンチマーク比較記事も参考にしてみてください。

コメント

タイトルとURLをコピーしました