Dockerボリューム管理コマンドの必須ガイド

永続データの作成、一覧表示、検査、マウント、バックアップ、削除、およびプルーニングのためのDockerボリュームコマンドを学びます。

Dockerボリューム管理コマンドの必須ガイド

Dockerボリューム管理コマンドは、コンテナが重要なデータを書き込むとすぐに重要になります。コンテナの書き込み可能レイヤーはコンテナを削除すると消えますが、Dockerボリュームはデータベースファイル、アップロード、キャッシュデータ、またはアプリケーションの状態をコンテナの再構築全体で保持できます。

このガイドでは、主要なdocker volumeコマンド、コンテナへのボリュームのアタッチ方法、およびクリーンアップコマンドが予期せぬ結果をもたらす可能性がある場所について説明します。

Dockerボリュームとは?

Dockerボリュームは、Dockerが管理するストレージオブジェクトです。これらはコンテナの書き込み可能レイヤーの外部に存在し、デフォルトのlocalドライバーを使用する場合、通常はホスト上のDocker管理の場所に配置されます。名前付きボリュームは、それを使用したコンテナを停止、削除、または再作成した後も利用可能です。

ボリュームは以下の理由で便利です:

  • 永続性: データはコンテナの置き換え後も存続します。
  • 分離: アプリケーションデータはイメージと書き込み可能レイヤーから分離されます。
  • ドライバーサポート: ボリュームドライバーはローカルディスク、ネットワークストレージ、またはプラットフォーム固有のストレージバックエンドを使用できます。
  • 運用の明確さ: 名前付きボリュームは、匿名のコンテナレイヤーよりも検査、バックアップ、再利用が容易です。

主要なdocker volumeコマンド

docker volumeコマンドは、ボリュームの作成、一覧表示、検査、および削除のための主要なインターフェースです。

docker volume create

名前付きボリュームを作成:

docker volume create my-app-data

Docker生成の名前でボリュームを作成:

docker volume create

非デフォルトのセットアップを使用する場合、ドライバーオプションを渡すこともできます:

docker volume create --driver local my-app-data

docker volume ls

ボリュームを一覧表示:

docker volume ls

名前のみ表示:

docker volume ls -q

未使用のボリュームをフィルタリング:

docker volume ls --filter dangling=true

dangling=trueは、Dockerがそのボリュームをコンテナから参照されていないと見なすことを意味します。データが重要でないことを意味するわけではありません。

docker volume inspect

ボリュームを検査:

docker volume inspect my-app-data

ローカルボリュームの場合、出力は次のようになります:

[
  {
    "CreatedAt": "2026-05-23T10:00:00Z",
    "Driver": "local",
    "Labels": null,
    "Mountpoint": "/var/lib/docker/volumes/my-app-data/_data",
    "Name": "my-app-data",
    "Options": null,
    "Scope": "local"
  }
]

Mountpointはトラブルシューティングに便利ですが、コンテナがボリュームを使用している間は、そこで直接ファイルを編集しないでください。アプリケーションまたは管理されたメンテナンスコンテナにデータを書き込ませてください。

docker volume rm

1つ以上のボリュームを削除:

docker volume rm my-app-data

Dockerは、コンテナが停止していても、そのボリュームを参照している限り削除しません。最初にそれらのコンテナを見つけて削除してください:

docker ps -a --filter volume=my-app-data
docker rm <container-name-or-id>
docker volume rm my-app-data

このコマンドはボリュームデータを削除します。データが重要な場合は、最初にバックアップしてください。

docker volume prune

Pruneは未使用のローカルボリュームを削除します。現在のDockerバージョンでは、docker volume pruneはデフォルトで未使用の匿名ボリュームを削除します。未使用の名前付きボリュームも削除する場合は、--allを使用してください。

未使用の匿名ボリュームを削除:

docker volume prune

確認プロンプトをスキップ:

docker volume prune --force

名前付きボリュームを含む、すべての未使用のローカルボリュームを削除:

docker volume prune --all

ラベルを使用してクリーンアップをより安全に:

docker volume create --label app=myapp myapp-cache
docker volume prune --filter label=app=myapp

Prune操作はデータを完全に削除します。名前付きアプリケーションデータをプルーニングする前に、ボリュームに何が含まれているかを確認してください。

コンテナへのボリュームのマウント

コンテナを作成するときにボリュームをアタッチします。Dockerは、名前付きボリュームがまだ存在しない場合、自動的に作成できます。

-vを使用

docker run --name my-postgres \
  -v pgdata:/var/lib/postgresql/data \
  -d postgres

ここで、pgdataはボリューム名、/var/lib/postgresql/dataはコンテナ内のパスです。

--mountを使用

--mountはより明示的で、スクリプトで読みやすくなっています:

docker run --name my-redis \
  --mount type=volume,source=redisdata,target=/data \
  -d redis

どちらの形式も有効です。特に追加のマウントオプションがある場合に、より明確なキーと値の構文が必要な場合は--mountを使用してください。

ボリュームのバックアップと復元

Dockerボリュームは永続ストレージですが、バックアップではありません。簡単なバックアップパターンは、ボリュームをマウントし、アーカイブを現在のディレクトリに書き込む一時コンテナを実行することです:

docker run --rm \
  -v my-app-data:/data:ro \
  -v "$PWD":/backup \
  alpine \
  tar czf /backup/my-app-data.tgz -C /data .

空のボリュームに復元:

docker volume create my-app-data-restored

docker run --rm \
  -v my-app-data-restored:/data \
  -v "$PWD":/backup \
  alpine \
  tar xzf /backup/my-app-data.tgz -C /data

データベースの場合、整合性が重要な場合はデータベースネイティブのバックアップツールを優先してください。ライブデータベースボリュームのファイルシステムアーカイブは、データベースが停止しているか、そのバックアップ方法をサポートしていない限り、安全ではない可能性があります。

Dockerボリューム管理のベストプラクティス

  • 保持する予定のデータには名前付きボリュームを使用します。
  • アプリケーションまたは環境に属するボリュームにラベルを付けます。
  • 削除またはプルーニングする前にボリュームを検査します。
  • 重要なボリュームをDockerホストの外部にバックアップします。
  • かけがえのないデータを匿名ボリュームにのみ保存しないでください。
  • バックアップだけでなく、復元もテストします。
  • ローカルDockerホストの外部にストレージが必要な場合は、ボリュームドライバーを使用します。

まとめ

保持したい状態には名前付きDockerボリュームを使用し、何かを削除する前に検査し、pruneを実際のデータ損失リスクがあるクリーンアップコマンドとして扱ってください。日常のワークフローはシンプルです:ボリュームを作成するかDockerに作成させ、docker runでマウントし、トラブルシューティング時に検査し、重要な場合はバックアップし、コンテナが参照しなくなった後にのみ削除します。