Dockerを日常的に使っていると、「最近なんだか重いな」と感じる場面があるかと思います。
ビルドや起動に時間がかかったり、PC全体の動作が遅くなったりする場合は、Docker内部に不要なリソースが溜まっている可能性が高いです。
この記事では、Dockerの動作が重くなったときに確認すべきポイントや、よくある原因・対処方法・注意点について、実際のコマンド例とともにご紹介します。
1. まずは現在の使用状況を確認する
重くなった原因を探るためには、まずリソース使用状況の可視化が重要です。以下の2つのコマンドを使って、現状を把握しましょう。
docker system df
このコマンドでは、イメージ・コンテナ・ボリューム・ビルドキャッシュなどのディスク使用状況を確認できます。
特に「Reclaimable(再利用可能)」な容量が多い場合は、不要なデータが残っている可能性が高いです。
docker stats
こちらは、現在起動中のコンテナごとのCPU使用率・メモリ使用量・ネットワークIOなどをリアルタイムで確認できます。
一部のコンテナがリソースを過剰に消費していないか、チェックしましょう。
2. よくある原因
Dockerのパフォーマンスが低下する主な原因として、以下のようなケースが挙げられます。
未使用のイメージ・ボリューム・ビルドキャッシュの蓄積
Dockerでは、ビルド時に生成されるキャッシュや古いイメージ、停止済みのコンテナなどが自動で削除されることはありません。そのため、プロジェクトを繰り返しビルド・実行しているうちに、ディスク容量がどんどん消費されていきます。
特にdocker system dfで確認した際に、Reclaimableな容量が多い場合はこれが原因である可能性が高いです。
コンテナによる過剰なリソース消費
特定のコンテナが高負荷状態になっている場合、Docker全体の動作に影響を与えることがあります。
docker statsで、CPUやメモリを異常に消費しているプロセスがないか確認しましょう。
3. 解決方法:不要なリソースの削除
原因がある程度わかったら、不要なリソースを削除して環境をクリーンアップしましょう。
基本のクリーンアップ
docker system prune
このコマンドは、未使用のコンテナ・ネットワーク・ビルドキャッシュを削除します。
比較的安全に使用できますが、必要なリソースが削除されないよう注意が必要です。
全面的なクリーンアップ(より強力)
docker system prune -a --volumes
このコマンドは、未使用のイメージ・ボリュームも含めて一括削除します。
ディスク使用量を大幅に削減できますが、永続化されていたデータも削除される可能性があるため慎重に使用してください。
使用には十分注意してください
ビルドキャッシュのみを削除
docker builder prune
ビルド時に残ったキャッシュだけを削除したい場合は、こちらを使うと便利です。
ビルドの再実行に時間がかかることがありますが、容量の節約には効果的です。
4. クリーンアップ時の注意点
リソース削除は便利ですが、以下の点には十分注意しましょう。
本当に不要か確認してから削除する
間違って必要なボリュームやイメージを削除してしまうと、復旧が困難になることがあります。
永続化されたデータに注意
特にデータベースなど、ボリュームを使って保存しているデータは簡単に削除しないようにしましょう。
定期的なメンテナンスを習慣にする
ある程度の期間ごとに、状態を確認して不要なデータを整理しておくと、快適な開発環境を保てます。
まとめ
Dockerが重くなったときの対応は、以下の手順が基本です
🔍 確認コマンド一覧
🧪 コマンド | 🎯 内容 | 🔐 安全性 |
---|---|---|
docker system df |
イメージ・コンテナ・ボリューム・ビルドキャッシュの使用状況と再利用可能容量を確認 | ✅ 安全 |
docker stats |
起動中コンテナのCPU・メモリ使用状況をリアルタイムで確認 | ✅ 安全 |
docker images -a |
ローカルに存在する全てのイメージ(使用中・未使用)を確認 | ✅ 安全 |
docker volume ls |
ボリューム一覧を確認 | ✅ 安全 |
docker buildx du |
ビルドキャッシュの使用状況を確認(BuildKit利用時) | ✅ 安全 |
🧹 削除コマンド一覧
🧹 コマンド | 🎯 内容 | 🔐 安全性 |
---|---|---|
docker builder prune |
未使用のビルドキャッシュを削除 | ✅ 安全 |
docker image prune |
未使用のイメージを削除(使用中のものは除外) | ⚠️ 注意 |
docker system prune |
停止中のコンテナ、未使用のネットワーク・ビルドキャッシュを削除 | ⚠️ 注意 |
docker volume prune |
未使用のボリュームを削除 | ⚠️ 注意 |
docker system prune -a |
使用していない全てのイメージも含めて削除 | 🚨 危険 |
docker system prune -a --volumes |
すべての未使用リソース(イメージ・ボリューム含む)を削除 | 🚨 危険 |