Docker ボリューム
作成日:
Docker container infrastructure volume
Dockerコンテナのデータを永続化するための仕組み。コンテナが削除されてもデータが保持され、ホストとコンテナ間でファイルを共有できます。
重要な概念:
- コンテナ自体はデータを永続化できない - コンテナ削除でデータも消失
- ボリュームでデータの永続化を実現 - コンテナとは独立してデータを保存
- 本番環境でのデータ保護 - サーバーデプロイ時もボリューム設定でデータを保持
ボリュームの種類
-
名前付きボリューム(Named Volumes)
- Dockerが管理する永続化ストレージ
- 複数のコンテナ間でデータを共有可能
-
バインドマウント(Bind Mounts)
- ホストの特定のディレクトリをコンテナにマウント
- ホストのファイルシステムに直接アクセス
-
tmpfs マウント
- メモリ上に一時的なファイルシステムを作成
- コンテナ停止時にデータは消失
基本的な使い方
# 名前付きボリュームの作成
docker volume create my-volume
# ボリューム一覧の確認
docker volume ls
# ボリュームの詳細情報
docker volume inspect my-volume
# ボリュームを使ってコンテナを起動
docker run -v my-volume:/app/data nginx
# バインドマウントの例
docker run -v /host/path:/container/path nginx
# 読み取り専用でマウント
docker run -v /host/path:/container/path:ro nginx
ボリュームの実際の保存場所
名前付きボリュームの保存場所:
- Linux:
/var/lib/docker/volumes/<volume_name>/_data - macOS (Docker Desktop): Docker VM内の
/var/lib/docker/volumes/<volume_name>/_data - Windows (Docker Desktop): Docker VM内の
/var/lib/docker/volumes/<volume_name>/_data
Docker VMとは?
- macOSやWindowsでは、DockerはLinuxカーネルが必要なため、仮想マシン(VM)上で動作する
- Docker Desktopが自動的にLinux VMを作成・管理している
- このVMは通常のFinderやエクスプローラーからは見えない隠れた仮想環境
- VMはNATモードでホストと接続されている(詳細は VMネットワーキング を参照)
ローカルファイルからの確認について:
- Linux: ホストマシンのファイルシステムに直接保存されるため、通常のファイルマネージャーでアクセス可能
- macOS/Windows: Docker VM内に保存されるため、通常のFinderやエクスプローラーからは直接アクセス不可
- ただし、Docker Desktopの設定でファイル共有を有効にしている場合、一部アクセス可能な場合もある
# ボリュームの詳細情報で保存場所を確認
docker volume inspect my-volume
# Mountpoint フィールドに実際のパスが表示される
# macOS/WindowsでDocker VM内にアクセスする場合
docker run --rm -it --privileged --pid=host alpine:latest nsenter -t 1 -m -u -n -i sh
# この後、/var/lib/docker/volumes/ を確認可能
# よりシンプルな方法:一時コンテナでボリュームをマウントしてアクセス
docker run --rm -it -v my-volume:/data alpine:latest sh
# /data ディレクトリ内でボリュームのデータを確認・編集可能
注意点:
- macOS/WindowsのDocker Desktopでは、ボリュームはDocker VM内に保存される
- ホストから直接アクセスするのは推奨されない
- ボリューム内のデータにアクセスしたい場合は、コンテナ経由でアクセスすることを推奨
本番環境でのボリューム活用
データ永続化の重要性:
# 開発環境
docker run -v $(pwd)/data:/app/data myapp
# 本番環境(Docker Compose例)
version: '3.8'
services:
web:
image: myapp
volumes:
- app-data:/app/data
- /opt/config:/app/config # ホストの設定ファイル
db:
image: postgres
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
app-data: # 名前付きボリューム(Dockerが管理)
postgres-data: # DBデータの永続化
クラウド環境での考慮点:
- AWS: EBS Volume, EFS
- GCP: Persistent Disk
- Azure: Azure Disk
- Kubernetes: PersistentVolume (PV) / PersistentVolumeClaim (PVC)
関連トピック
- Docker - Dockerの基本概念
- Docker Compose - マルチサービス構成でのボリューム活用