Dockerを使用していると、イメージやコンテナ、ボリュームなどが溜まり、ディスク容量を圧迫することがある。ここでは、ディスク使用量の確認と、不要なデータを削除するための主要なコマンドについて解説する。
1. docker system df -v
このコマンドは、Dockerが現在使用しているディスク容量の内訳を詳細に確認するためのものである。-v
(--verbose
) オプションを付けることで、個々のイメージやコンテナがどれだけの容量を占有しているかまで表示される。prune
コマンドを実行する前に、現状を把握するために極めて有用である。
docker system df -v
実行すると、イメージ、コンテナ、ローカルボリューム、ビルドキャッシュのそれぞれについて、アクティブなものと解放可能なもの(RECLAIMABLE)が一覧で表示される。特にRECLAIMABLE
の項目は、クリーンアップによってどれだけの容量が空くかの目安となる。
2. docker image prune -a
このコマンドは、使用されていないDockerイメージをすべて削除するためのものである。Dockerを使っていると、ビルドの中間生成物や、古いバージョンのイメージが残り続けることがある。これらを一掃するのが目的である。
prune
: 不要なものを刈り取る(削除する)という意味である。-a
(--all
): このオプションが重要である。これを付けないと、タグが付いていない「dangling」(宙ぶらりん)なイメージしか削除されない。コンテナから参照されていないすべてのイメージを削除対象とするために-a
は必須である。
docker image prune -a
実行すると、削除対象となるイメージの一覧が表示され、本当に削除してよいか確認を求められる。確認なしで強制的に実行したい場合は-f
(--force
) オプションを追加する。
3. docker system prune -a
これは、Dockerシステム全体に対してクリーンアップを実行する、最も強力なコマンドである。イメージだけでなく、停止中のコンテナや未使用のネットワークなど、使われていないリソースをまとめて削除する。
docker image prune -a
と同様に、-a
オプションを付けることで、未使用のイメージなどがすべて削除対象となる。(-a
を付けない場合は、danglingなリソースのみが対象となる。)
docker system prune -a
このコマンドが削除する対象は以下の通りである。
- 停止しているすべてのコンテナ
- どのコンテナからも使用されていないすべてのネットワーク
- 未使用のすべてのビルドキャッシュ
注意: このコマンドは非常に強力であり、意図しないデータ(例えば、一時的に停止しているコンテナなど)まで削除してしまう可能性がある。実行する前には、必ずdocker system df
で解放される容量を確認し、削除されても問題ないか検討すべきである。未使用のボリュームも削除したい場合は、--volumes
フラグを追加する必要がある。
4. まとめ
ここまで紹介した3つのコマンドの使い分けと推奨されるワークフローを以下にまとめる。安全なディスク管理のため、コマンドの特性を理解して使い分けることが重要である。
コマンド | 主な目的 | 注意点 |
---|---|---|
docker system df -v |
現状確認。削除対象と解放可能な容量を詳細に把握する。 | 削除は行わない。まず最初に実行すべきコマンド。 |
docker image prune -a |
イメージのみを掃除。未使用のイメージを一括削除する。 | コンテナやボリュームには影響しない、比較的安全なクリーンアップ。 |
docker system prune -a |
Docker全体の大掃除。イメージ、コンテナ、ネットワークなどをまとめて削除。 | 最も強力。意図しないデータ削除の可能性があるため、実行前にdf での確認が必須。 |
推奨ワークフロー:
- まず
docker system df -v
で状況を確認する。 - イメージの整理が目的なら
docker image prune -a
を使う。 - ディスク全体を大幅に解放したい場合に限り、内容をよく確認した上で
docker system prune -a
を実行する。