リンドくんたなべ先生、Dockerを使ってたらディスク容量がどんどん減っていくんですけど...これって普通なんですか?
たなべあぁ、それはDocker初心者あるあるだね!
Dockerは使っていくうちに不要なイメージやコンテナがどんどん溜まっていくんだ。でも心配しないで、docker system pruneっていう便利なコマンドがあるんだよ。
Dockerが容量を圧迫する理由を知ろう
Dockerを使い始めて数週間、気づいたらディスク容量が大幅に減っていた...という経験はありませんか?
これは決して珍しいことではなく、Dockerの仕組み上、ごく自然に起こる現象なのです。
Dockerを使用していると、以下のようなリソースが自動的に蓄積されていきます。
- 停止したコンテナ -
docker runで起動したコンテナは、停止後も自動削除されない - 未使用のイメージ -
docker pullでダウンロードしたイメージや、ビルドの途中で生成されたイメージ - 未使用のネットワーク - コンテナが削除されても、作成したネットワークは残り続ける
- 未使用のボリューム - データ永続化のために作成したボリュームも、明示的に削除しない限り残る
- ビルドキャッシュ - イメージビルド時に生成されるキャッシュデータ
特に開発環境では、試行錯誤を繰り返す中でイメージのビルドとコンテナの起動を何度も行うため、気づかないうちに大量の不要リソースが溜まってしまうのです。
実際、Dockerを数ヶ月使い続けると、数十GBものディスク容量が不要なリソースで占められることも珍しくありません。これが放置されると、ディスク容量不足でシステム全体の動作に支障をきたす可能性もあります。
docker system pruneとは何か
リンドくんじゃあ、その溜まった不要なリソースはどうやって削除すればいいんですか?
たなべそれこそがdocker system pruneの出番なんだ!
このコマンドはDockerの不要リソースを一括で削除してくれる、まさにDocker版の大掃除ツールなんだよ。
docker system pruneの基本
docker system pruneは、Dockerが管理するリソースの中で、現在使用されていない不要なものを一括削除するコマンドです。
基本的な実行方法は非常にシンプルです。
docker system pruneこのコマンドを実行すると、デフォルトで以下のリソースが削除されます。
- 停止中のすべてのコンテナ
- どのコンテナからも使用されていないネットワーク
- タグ付けされていない(dangling)イメージ
- すべてのビルドキャッシュ
実行すると、削除されるリソースのサイズが表示され、本当に削除してよいか確認が求められます。
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と入力すると、実際に削除が実行されます。
なぜprune(剪定)というのか
「prune」という単語は、園芸用語で「枝を剪定する」という意味です。
つまり、不要な枝(リソース)を切り落として、健全な状態を保つというイメージから来ています。
Dockerにおいても、定期的に不要なリソースを「剪定」することで、システムを健全な状態に保つことができるのです。
基本的な使い方と安全な実行方法
リンドくんでも、大事なデータまで消えちゃったりしませんか?ちょっと怖いんですけど...
たなべその心配はもっともだね!
でも安心して。実行前に必ず確認が求められるし、実際に削除される前に何が削除されるか確認することもできるんだよ。
実行前の確認ステップ
docker system pruneを安全に実行するための手順を紹介します。
1. 現在のリソース状況を確認
まず、どのくらいのリソースがシステムに存在するかを確認しましょう。
docker system dfこのコマンドを実行すると、以下のような情報が表示されます。
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 15 5 2.5GB 1.8GB (72%)
Containers 8 2 150MB 120MB (80%)
Local Volumes 5 3 500MB 200MB (40%)
Build Cache 30 0 3.2GB 3.2GB (100%)
この表示から、削除可能(RECLAIMABLE)なリソースの量を事前に把握できます。
2. 削除されるリソースの詳細確認
何が削除されるか具体的に知りたい場合は、以下のコマンドで確認できます。
# 停止中のコンテナを確認
docker ps -a --filter "status=exited"
# 未使用のイメージを確認
docker images --filter "dangling=true"
# 未使用のネットワークを確認
docker network ls --filter "dangling=true"3. 確認なしで実行する場合
テスト環境や自動化スクリプトで使用する場合、確認プロンプトをスキップすることもできます。
docker system prune -fまたは
docker system prune --forceただし、本番環境では必ず確認ありで実行することを強くおすすめします。
より強力な削除オプション
デフォルトのdocker system pruneでは、使用中でないイメージの一部は削除されません。
より徹底的に削除したい場合は、以下のオプションを使用します。
docker system prune -aまたは
docker system prune --allこのオプションを付けると、どのコンテナからも使用されていないすべてのイメージが削除対象に含まれます。
つまり、タグ付けされたイメージであっても、現在実行中のコンテナで使用されていなければ削除されます。
注意点として、-aオプションを使用すると、次回コンテナを起動する際にイメージを再度ダウンロードする必要が生じる可能性があります。
よくあるトラブルと解決方法
リンドくん先生、docker system prune実行したら、必要なイメージまで消えちゃったんですけど...
たなべそれは-aオプションを使ったからかもしれないね。
大丈夫、よくある失敗だから、解決策と予防法を教えるよ!
トラブル① 必要なイメージが削除された
症状: -aオプションで実行したら、使いたかったイメージまで削除されてしまった
解決法
# 削除されたイメージを再度取得
docker pull イメージ名:タグ
# または、Dockerfileから再ビルド
docker build -t イメージ名:タグ .予防策
-aオプションは慎重に使用する- 重要なイメージには必ずタグを付ける
- 定期的に使用するイメージは、docker-compose.ymlなどで明示的に管理する
トラブル② ボリュームのデータが消失
症状: --volumesオプションで実行したら、データベースのデータが消えた
解決法
残念ながら、一度削除されたボリュームのデータは復元できません。
バックアップがある場合はそこから復元してください。
予防策
# ボリュームを除外して実行
docker system prune # --volumesオプションなし
# または、重要なボリュームに名前を付けて管理
docker volume create my-important-dataトラブル③ 削除に時間がかかりすぎる
症状: 大量のリソースがあり、削除に非常に長い時間がかかる
解決法
# 段階的に削除する
docker container prune -f
docker image prune -f
docker network prune -f
# 最後にシステム全体
docker system prune -fトラブル④ 権限エラーが発生
症状: permission deniedなどのエラーが表示される
解決法
# Linux/Macの場合
sudo docker system prune
# または、ユーザーをdockerグループに追加
sudo usermod -aG docker $USER
# 再ログインが必要まとめ
リンドくんなるほど!定期的に掃除すれば、ディスク容量の心配がなくなりますね。
たなべその通り!
月に1回でも定期的にpruneすることで、Dockerを快適に使い続けられるよ。最初は怖いかもしれないけど、慣れれば簡単だからね。
docker system pruneコマンドは、Dockerを使い続ける上で欠かせないメンテナンスツールです。
重要なポイントをおさらいしましょう。
- 定期的な実行がディスク容量問題を防ぐ鍵
- 実行前には必ず
docker system dfで現状確認すること -aオプションは慎重に使用し、重要なイメージが削除されないよう注意--volumesオプションは特に注意が必要。データ消失の恐れあり- 本番環境では段階的な削除を心がける
開発環境では以下のようなスケジュールがおすすめです。
- 毎週:
docker system prune(基本形) - 毎月:
docker system prune -a(徹底クリーンアップ) - 必要に応じて:
docker system prune -a --volumes(完全クリーンアップ)
Dockerの容量問題で悩んでいる方、これから本格的にDockerを使い始める方は、ぜひこのdocker system pruneコマンドを活用してください。
快適なDocker環境を維持するには、定期的なメンテナンスが何より重要です。
最初は少し緊張するかもしれませんが、慣れればルーティン作業として簡単に実施できるようになります。





