Dockerのディスク容量を一括解放!docker system pruneの使い方

Dockerを使って開発や動作検証を続けていると、いつの間にかPCやサーバーのストレージ容量が数十GB単位で圧迫されてしまうことがあります。

コンテナの作成やイメージのビルドを繰り返すうちに、停止した古いコンテナ、タグの外れた中間イメージ(danglingイメージ)、過去のビルドキャッシュなどがローカルディスク内にどんどん蓄積されていくのが主な原因です。

PCの空き容量が少なくなると、動作が重くなったり、新しいイメージのダウンロードやビルドがエラーで失敗したりすることもあります。とはいえ、手動で1つずつ不要なコンテナやイメージを探して削除するのは手間がかかります。

この記事では、Dockerが現在どれだけのディスク容量を消費しているかを確認する方法から、docker system prune コマンドを使って安全かつ一括で空き容量を解放する具体的な手順、用途別のオプションやデータ保護の注意点までをわかりやすく解説します。

この記事で行うこと

  • 現在のDockerによるディスク消費量と内訳を確認する(docker system df
  • docker system prune の基本動作と削除される対象を理解する
  • 未使用のイメージまで含めて一掃する強力な削除オプション(-a)を学ぶ
  • ボリュームデータを削除する際の危険性とデータ保護のポイントを把握する
  • コンテナやイメージ、キャッシュを個別に削除したい場合のコマンドを確認する

前提条件・対象読者

この記事では、以下の環境と読者を想定しています。

  • 前提条件:
    • Docker Desktop または Docker Engine がインストールされていること
    • ターミナル(PowerShell、コマンドプロンプト、macOSやLinuxのターミナル、WSL2など)から docker コマンドが実行できること
  • 対象読者:
    • Dockerを日常的に利用しており、ローカルディスクの容量不足に悩んでいる方
    • docker system prune コマンドを安全に使って容量を一括削減したい方
    • 必要な開発データや稼働中コンテナを誤って削除してしまわないか不安な方

【結論】Dockerの空き容量を一括で取り戻すおすすめコマンド

Dockerの不要データを一括で整理したい場合、目的に応じて以下の2つのコマンドを使い分けるのが基本です。

まず、もっとも安全に空き容量を確保できる基本コマンドです。

docker system prune

このコマンドを実行すると、停止中のコンテナ、使われていないネットワーク、タグのない中間イメージ(danglingイメージ)、ビルドキャッシュが一括で削除されます。現在起動しているコンテナや、名前(タグ)が付いている既存のイメージ、ボリュームデータは保持されるため、日常的なメンテナンスに適しています。

さらに、しばらく使っていない検証用イメージも含めて徹底的に空き容量を増やしたい場合は、-a オプションを指定します。

docker system prune -a

このコマンドでは、現在どのコンテナからも参照されていないすべてのイメージが削除対象になります。過去にダウンロードしたきり使っていないベースイメージなども一掃されるため、数十GB単位の空き容量を取り戻せることがあります。

それぞれのコマンドで削除される対象の違いは以下のとおりです。

削除対象docker system prune(通常)docker system prune -a(強力削除)
停止中のコンテナ削除される削除される
未使用のネットワーク削除される削除される
タグなしイメージ(dangling)削除される削除される
未使用のタグ付きイメージ保持される削除される
ビルドキャッシュ削除される削除される
ボリュームデータ保持される(安全)保持される(安全)

どちらのコマンドを実行した場合でも、データベースなどの永続化データが保存されているボリュームは削除されません。そのため、基本的には安心して実行できます。

現在のDockerディスク使用量を確認する(docker system df)

削除コマンドを実行する前に、まずはDockerがどのリソースでどれだけの容量を消費しているかを確認しましょう。ディスク使用量の確認には以下のコマンドを使用します。

docker system df

コマンドを実行すると、以下のような形式でリソースごとの使用量一覧が表示されます。

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          18        5         8.45GB    5.12GB (60%)
Containers      8         2         124MB     82MB (66%)
Local Volumes   6         2         3.21GB    2.10GB (65%)
Build Cache     42        0         14.8GB    14.8GB (100%)

表示される各項目の見方は次のとおりです。

  • TYPE: リソースの種類(Images: イメージ、Containers: コンテナ、Local Volumes: ボリューム、Build Cache: ビルドキャッシュ)
  • TOTAL: 保持している総数
  • ACTIVE: 現在稼働中のコンテナから利用されている数
  • SIZE: 現在消費している合計ディスクサイズ
  • RECLAIMABLE: 削除によって解放可能な容量と割合

上記の例では、Build Cache(ビルドキャッシュ)が14.8GB、未使用のイメージが5.12GBあり、これらを整理するだけで約20GBもの空き容量を回収できることがわかります。

さらに詳しい内訳(どのイメージやコンテナが容量を食っているか)を個別に確認したい場合は、詳細表示オプションの -v を付けて実行します。

docker system df -v

安全に空き容量を確保する(docker system prune の基本動作)

現状のディスク使用量が把握できたら、まずは安全性の高い基本コマンドを実行してみましょう。

docker system prune

コマンドを実行すると、以下のように削除対象の確認プロンプトが表示されます。

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all build cache

Are you sure you want to continue? [y/N]

ここでキーボードの y を入力して Enter を押すと、削除処理が開始されます。

処理が完了すると、削除されたコンテナIDやイメージIDの一覧とともに、最終行に解放された合計容量が表示されます。

Total reclaimed space: 15.24GB

この基本コマンドであれば、起動中のコンテナやタグが付いている通常のイメージには一切影響しません。そのため、日頃の開発作業の合間に手軽に実行できるクリーンアップ方法としておすすめです。

CI/CD環境やスクリプトから対話プロンプトなしで実行したい場合は、強制実行フラグの -f(または –force)を付与します。

docker system prune -f

未使用のイメージも丸ごと削除する(docker system prune -a の強力削除)

通常の prune コマンドを実行しても期待したほど容量が減らない場合があります。その原因の多くは、タグが付いたまま残っている過去のイメージです。

例えば、以前のプロジェクトで一度だけ使った公式イメージ(ubuntu、node、python、postgresなど)は、停止中であってもタグが付いているため、通常の prune では保護されて削除されません。

使っていないイメージを丸ごと整理して最大限のディスク容量を確保したい場合は、-a(–all)オプションを追加して実行します。

docker system prune -a

実行時の確認プロンプトには、削除対象として「all images without at least one container associated to them(コンテナに関連付けられていないすべてのイメージ)」が含まれます。

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N]

y を入力して実行すると、現在動いているコンテナが使用しているイメージ以外のすべてが削除されます。

このコマンドのメリットは、不要なイメージが一掃されて劇的に空き容量が増える点です。

一方で注意点として、次回プロジェクトを起動(docker compose up など)する際に、必要なベースイメージをDocker Hubなどから再度ダウンロードし直す必要があるため、初回の起動やビルドに少し時間がかかるようになります。ネット環境が安定している場所で実行することをおすすめします。

ボリュームデータも一緒に削除する際の注意点(–volumes オプションとデータ保護)

docker system prune には、未使用のボリュームまでまとめて削除する –volumes オプションが存在します。

# 注意:開発データが消える可能性があるコマンド
docker system prune --volumes

ただし、このオプションの使用には細心の注意が必要です。

Dockerのボリュームには、MySQLやPostgreSQLといったデータベースの実データ、アプリケーションのアップロードファイル、設定ファイルなど、コンテナが破棄されても保持すべき重要データが保存されています。

もしデータベースコンテナを一時的に停止している状態で –volumes オプションを付けて prune を実行すると、Docker側からは「現在どのコンテナにも接続されていない未使用ボリューム」と判定され、大切なデータベースの中身がすべて消去されてしまいます。

一度削除されたボリュームのデータを元に戻すことはできません。

そのため、ボリュームを整理したい場合は、安易に一括削除コマンドを使わず、事前にボリューム一覧を確認してから不要なものだけを個別に削除するか、バックアップを取得したうえで実行してください。

ボリュームの一覧を確認するコマンド:

docker volume ls

個別に削除したい場合のコマンド(コンテナ、イメージ、ボリューム、ビルドキャッシュ)

一括削除ではなく、「ビルドキャッシュだけを捨てたい」「停止中のコンテナだけを掃除したい」といった場合には、対象リソースごとの個別 prune コマンドを使用します。

コンテナのみ削除する

停止しているコンテナのみをまとめて削除します。イメージやキャッシュには手を付けたくない場合に便利です。

docker container prune

イメージのみ削除する

タグのない中間イメージ(dangling)のみを削除する場合は以下を実行します。

docker image prune

タグ付きも含め、使われていないイメージをすべて削除したい場合は -a を付けます。

docker image prune -a

ビルドキャッシュのみ削除する

Dockerfileのビルド時に生成された一時キャッシュのみを削除します。ソースコードを変更したのにキャッシュのせいでビルドがうまく反映されない場合や、キャッシュだけで数GB消費している場合に効果的です。

docker builder prune

過去の全ビルドキャッシュを徹底的に削除したい場合は、同様に -a オプションを併用します。

docker builder prune -a

ボリュームのみ削除する

現在どのコンテナからもマウントされていないボリュームを整理します。先述のとおり、必要な永続化データが含まれていないか事前に確認してから実行してください。

docker volume prune

ネットワークのみ削除する

どのコンテナにも割り当てられていないカスタムネットワークを削除します。

docker network prune

次に読むおすすめ記事

Docker Composeの基本コマンドや日常的なコンテナ起動・停止手順を網羅したい方は、以下のコマンド一覧まとめ記事もあわせて参考にしてください。

docker/docker compose よく使うコマンド一覧|v2(スペース区切り)対応
DockerやDocker Composeをしばらく使っていないと、基本的なコマンドを忘れてしまい困ることがあります。特に、2023年7月にDocker Compose v1(ハイフン区切りの docker-compose)がサポートを終了…

参考情報