Dockerのディスク使用量を確認・削減する方法|イメージ・コンテナ・ボリュームの安全な整理
Dockerを使い続けていると、イメージやコンテナ、ビルドキャッシュなどが蓄積し、サーバーのディスク容量を圧迫することがあります。
特に、開発環境や検証環境でDockerを頻繁に利用している場合、使わなくなったイメージや停止中のコンテナが残り、気づかないうちにストレージを消費していることがあります。
Dockerのディスク容量を整理するときは、最初に使用量を確認し、不要なデータを種類ごとに削除するのが安全です。
ここでは、Dockerのディスク使用量を確認するコマンドから、イメージ・コンテナ・ボリューム・ビルドキャッシュの整理方法まで順番に説明します。
Dockerのディスク使用量を確認する方法
まずは、Dockerがどれくらいのディスク容量を使用しているか確認しましょう。
docker system dfで全体の使用量を確認する
Dockerのストレージ使用量は、次のコマンドで確認できます。
docker system df実行すると、主に次の項目が表示されます。
| 項目 | 内容 |
|---|---|
| Images | Dockerイメージの使用量 |
| Containers | コンテナの使用量 |
| Local Volumes | ローカルボリュームの使用量 |
| Build Cache | ビルドキャッシュの使用量 |
出力例:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 10 3 5.2GB 3.1GB
Containers 5 2 500MB 300MB
Local Volumes 4 2 2.0GB 1.0GB
Build Cache 12 0 1.5GB 1.5GBRECLAIMABLEは削除によって解放できる可能性がある容量の目安です。表示された容量が、そのまま確実に空くわけではありません。
docker system df -vで詳細を確認する
どのイメージやボリュームが容量を使っているのか詳しく調べたい場合は、次のコマンドを実行します。
docker system df -vイメージやコンテナ、ボリュームなどの詳細な使用状況を確認できます。
容量の大きいデータを特定してから削除すれば、必要なデータまで消してしまうリスクを抑えられます。
不要なDockerコンテナを削除する
停止したコンテナは、使わなくなっても自動的には削除されません。
不要なコンテナが残っている場合は、次のコマンドで確認できます。
docker ps -a現在起動しているコンテナだけでなく、停止中のコンテナも一覧に表示されます。
停止中のコンテナをまとめて削除する
停止中のコンテナを一括削除するには、次のコマンドを使用します。
docker container prune確認メッセージが表示されたら、削除して問題ないことを確認してから実行してください。
このコマンドは停止中のコンテナを削除します。実行中のコンテナは対象になりません。
特定のコンテナだけを削除したい場合は、次のように指定します。
docker rm コンテナIDコンテナ内に必要なデータが残っていないか、削除前に確認しておきましょう。
不要なDockerイメージを削除する
Dockerイメージは、コンテナを作成するときに使用するテンプレートです。
アプリケーションの更新やイメージの再ビルドを繰り返すと、古いイメージが残って容量を消費することがあります。
Dockerイメージの一覧を確認する
docker images不要なイメージを確認したら、次のコマンドで削除できます。
使われていないイメージを削除する
docker image pruneこのコマンドでは、タグが付いていない不要なイメージ(dangling images)が削除対象になります。
コンテナで使用されていないイメージをまとめて削除する
docker image prune -a-aを付けると、タグの有無にかかわらず、どのコンテナからも使用されていないイメージが削除対象になります。
今後使う予定のイメージも削除される可能性があるため、実行前に一覧を確認しておくと安心です。
削除したイメージが必要になった場合は、再度ダウンロードする必要があります。
Dockerボリュームを整理する方法
Dockerボリュームは、コンテナとは別にデータを保存するための仕組みです。
データベースのデータやアプリケーションの保存ファイルなどに使われるため、削除には特に注意が必要です。
ボリュームの一覧を確認する
docker volume ls個別のボリュームについて詳しく調べる場合は、次のコマンドを使用します。
docker volume inspect ボリューム名保存先などの情報を確認できるため、削除してよいデータか判断するときに役立ちます。
使用されていないボリュームを削除する
docker volume pruneこのコマンドは、使用されていない匿名ボリュームを削除します。
Dockerのバージョンによっては、次のオプションを利用して、使用されていない名前付きボリュームも削除対象にできます。
docker volume prune -aただし、名前付きボリュームにはデータベースやアプリケーションの重要なデータが保存されている場合があります。
ボリュームを削除すると、保存されているデータも失われる可能性があります。 削除前に利用状況とバックアップを必ず確認してください。
なお、docker system prune --volumesとdocker volume prune -aは削除対象が同じではありません。docker system prune --volumesは、現在のDocker CLIでは未使用の匿名ボリュームが対象です。
Dockerのビルドキャッシュを削除する
Dockerでイメージをビルドすると、処理を高速化するためのビルドキャッシュが保存されます。
何度もビルドを繰り返す環境では、キャッシュが増えてディスク容量を圧迫することがあります。
ビルドキャッシュを削除する
docker builder pruneこのコマンドで、使用されていないビルドキャッシュを削除できます。
さらに多くのキャッシュを整理したい場合は、次のコマンドを使用します。
docker builder prune -a-aを付けると、未使用のビルドキャッシュがより広い範囲で削除対象になります。
次回のビルドでは、削除したキャッシュを再作成するため、ビルドに時間がかかる場合があります。
Dockerの不要データをまとめて削除する
個別に整理するのが面倒な場合は、docker system pruneを使って不要なデータをまとめて削除できます。
基本的なクリーンアップ
docker system prune主に次のデータが削除対象になります。
- 停止中のコンテナ
- 使用されていないネットワーク
- dangling images
- 使用されていないビルドキャッシュ
未使用イメージもまとめて削除する
docker system prune -a-aを付けると、どのコンテナからも使用されていないイメージも削除対象になります。
匿名ボリュームも削除対象に含める
docker system prune -a --volumesこのコマンドでは、上記の削除対象に加えて、未使用の匿名ボリュームも削除対象になります。
ただし、名前付きボリュームを含むすべてのボリュームが削除されるわけではありません。 名前付きボリュームまで整理したい場合は、docker volume prune -aの対象や利用状況を別途確認してください。
一括削除は便利ですが、必要なイメージや停止中のコンテナまで削除する可能性があります。実行前に対象を確認し、重要なデータはバックアップしておきましょう。
Dockerのログが容量を圧迫している場合
イメージやコンテナを整理してもディスク容量が十分に戻らない場合は、Dockerのログが増えていないか確認してみましょう。
Dockerでは、設定によってコンテナのログが保存されます。ログのローテーションが設定されていないと、ファイルが大きくなり続けることがあります。
Dockerログの保存先を確認する
json-fileログドライバーを使用している場合、ログはDockerの管理ディレクトリ内に保存されます。
コンテナごとのログファイルの場所は、次のコマンドで確認できます。
docker inspect --format='{{.LogPath}}' コンテナID表示されたログファイルのサイズは、次のように確認できます。
sudo du -h /ログファイルのパスログファイルが大きくなっている場合は、ログローテーションの設定を検討しましょう。
Dockerのログローテーションを設定する
Dockerのデーモン設定ファイルであるdaemon.jsonに、次の設定を追加します。
一般的なLinux環境では、設定ファイルは次の場所にあります。
/etc/docker/daemon.json設定例:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}この設定では、1つのログファイルが10MBに達するとローテーションし、最大3ファイルまで保存します。
設定を反映するには、Dockerデーモンの再起動が必要です。
sudo systemctl restart dockerただし、デーモンの再起動は環境によって実行中のコンテナに影響する場合があります。作業前にサービスへの影響を確認してください。
また、デーモンのログ設定を変更しても、すでに作成されているコンテナには自動的に反映されません。変更後に作成し直したコンテナから新しい設定が適用されます。
Dockerのディスク容量を確認して作業を終える
不要なデータを削除したら、最後にディスク容量を確認しましょう。
Docker全体の使用量は、次のコマンドで確認できます。
docker system dfサーバー全体のディスク使用量は、次のコマンドで確認できます。
df -hDockerの使用量が減っていても、サーバー全体の空き容量が十分に増えていない場合は、Docker以外のファイルやログが容量を消費している可能性があります。
必要に応じて、duなどを使ってディスク使用量の大きいディレクトリを調べてみましょう。
なお、Dockerのデータ保存先は環境によって異なります。/var/lib/dockerなどの内部ディレクトリを直接削除するのは避け、基本的にはDockerのコマンドを使って整理してください。
Dockerのディスク容量を安全に管理するポイント
Dockerのディスク容量を定期的に管理するには、次の点を意識すると効果的です。
docker system dfで定期的に使用量を確認する- 停止中のコンテナや不要なイメージを整理する
- ビルドキャッシュが増えすぎていないか確認する
- ボリュームを削除する前に保存データを確認する
- ログローテーションを設定してログの肥大化を防ぐ
- Dockerの内部ディレクトリを直接削除しない
特に、データベースなどを利用している環境では、ボリュームの削除に注意が必要です。
容量を減らすことだけを優先せず、必要なデータやサービスを維持できる方法で整理しましょう。
まとめ
Dockerのディスク容量が増えてきた場合は、まずdocker system dfで使用状況を確認し、原因となっているデータを特定することが大切です。
停止中のコンテナや不要なイメージ、ビルドキャッシュは、用途に応じたpruneコマンドで整理できます。
一方、ボリュームには重要なデータが保存されている場合があるため、削除前の確認とバックアップが欠かせません。
Dockerの使用量を定期的に確認し、不要なデータを安全に整理することで、サーバーのディスク容量を管理しやすくなります。
