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でマウントし、トラブルシューティング時に検査し、重要な場合はバックアップし、コンテナが参照しなくなった後にのみ削除します。