Dockerのディスク使用量を確認・削減する方法|イメージ・コンテナ・ボリュームの安全な整理

Dockerを使い続けていると、イメージやコンテナ、ビルドキャッシュなどが蓄積し、サーバーのディスク容量を圧迫することがあります。

特に、開発環境や検証環境でDockerを頻繁に利用している場合、使わなくなったイメージや停止中のコンテナが残り、気づかないうちにストレージを消費していることがあります。

Dockerのディスク容量を整理するときは、最初に使用量を確認し、不要なデータを種類ごとに削除するのが安全です。

ここでは、Dockerのディスク使用量を確認するコマンドから、イメージ・コンテナ・ボリューム・ビルドキャッシュの整理方法まで順番に説明します。

Dockerのディスク使用量を確認する方法

まずは、Dockerがどれくらいのディスク容量を使用しているか確認しましょう。

docker system dfで全体の使用量を確認する

Dockerのストレージ使用量は、次のコマンドで確認できます。

docker system df

実行すると、主に次の項目が表示されます。

項目内容
ImagesDockerイメージの使用量
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.5GB

RECLAIMABLEは削除によって解放できる可能性がある容量の目安です。表示された容量が、そのまま確実に空くわけではありません。

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 -h

Dockerの使用量が減っていても、サーバー全体の空き容量が十分に増えていない場合は、Docker以外のファイルやログが容量を消費している可能性があります。

必要に応じて、duなどを使ってディスク使用量の大きいディレクトリを調べてみましょう。

なお、Dockerのデータ保存先は環境によって異なります。/var/lib/dockerなどの内部ディレクトリを直接削除するのは避け、基本的にはDockerのコマンドを使って整理してください。

Dockerのディスク容量を安全に管理するポイント

Dockerのディスク容量を定期的に管理するには、次の点を意識すると効果的です。

  • docker system dfで定期的に使用量を確認する
  • 停止中のコンテナや不要なイメージを整理する
  • ビルドキャッシュが増えすぎていないか確認する
  • ボリュームを削除する前に保存データを確認する
  • ログローテーションを設定してログの肥大化を防ぐ
  • Dockerの内部ディレクトリを直接削除しない

特に、データベースなどを利用している環境では、ボリュームの削除に注意が必要です。

容量を減らすことだけを優先せず、必要なデータやサービスを維持できる方法で整理しましょう。

まとめ

Dockerのディスク容量が増えてきた場合は、まずdocker system dfで使用状況を確認し、原因となっているデータを特定することが大切です。

停止中のコンテナや不要なイメージ、ビルドキャッシュは、用途に応じたpruneコマンドで整理できます。

一方、ボリュームには重要なデータが保存されている場合があるため、削除前の確認とバックアップが欠かせません。

Dockerの使用量を定期的に確認し、不要なデータを安全に整理することで、サーバーのディスク容量を管理しやすくなります。

Dockerコンテナが起動しない原因と確認方法

Dockerコンテナが再起動を繰り返す原因と対処方法

類似投稿