はじめに
Dockerコンテナは基本的にステートレス(状態を持たない)設計です。
そのため、コンテナを削除すると中のデータも同時に消えてしまいます。
しかし、実際の開発や運用では、データを永続化(persistent)**したいケースが多く存在します。
ここで登場するのが「Named Volume(名前付きボリューム)」です。
この記事では、Named Volumeの基本から、実際のハンズオンを通じてその使い方を理解します。
Named Volumeとは?
Named Volumeは、Dockerが管理する永続的なデータ領域で、名前で識別されます。
特徴として以下の点が挙げられます。
- コンテナとは独立してデータが保持される
- Dockerが管理する場所(通常
/var/lib/docker/volumes/
)に保存される - 複数のコンテナ間で共有が可能
docker-compose.yml
でも簡単に定義可能
匿名ボリュームとの違い
種類 | 定義方法 | 再利用 | 管理のしやすさ |
---|---|---|---|
匿名ボリューム | -v /data | 不可 | 難しい |
名前付きボリューム | -v mydata:/data | 可能 | 容易 |
ハンズオン:Named Volumeを実際に使ってみよう
ここでは、nginxを使ったシンプルなハンズオンを通じてNamed Volumeの使い方を理解します。
1. Named Volumeの作成
まず、Docker CLIからNamed Volumeを作成してみましょう。
docker volume create mydata
作成を確認:
docker volume ls
出力例:
DRIVER VOLUME NAME
local mydata
2. Volumeをコンテナにマウント
次に、このボリュームをNginxコンテナにマウントします。
docker run -d --name web -v mydata:/usr/share/nginx/html -p 8080:80 nginx
このコマンドで、
mydata
ボリュームが/usr/share/nginx/html
にマウントされ、- Nginxがそのディレクトリをルートとして使用します。
3. コンテンツをボリュームに配置
ボリュームにHTMLを配置してみましょう。
docker exec -it web bash
echo "Hello from Named Volume!" > /usr/share/nginx/html/index.html
exit
ブラウザで
👉 http://localhost:8080
にアクセスすると、以下のメッセージが表示されます。
Hello from Named Volume!
4. コンテナを削除してもデータは残る
試しにコンテナを削除してみます。
docker rm -f web
再度、同じボリュームを使ってコンテナを起動:
docker run -d --name web2 -v mydata:/usr/share/nginx/html -p 8080:80 nginx
ブラウザで再アクセスすると、先ほどのindex.html
がそのまま残っていることが確認できます。
これがNamed Volumeによる永続化の基本です。
ボリュームの管理コマンドまとめ
コマンド | 内容 |
---|---|
docker volume create <name> | 新規ボリューム作成 |
docker volume ls | ボリューム一覧 |
docker volume inspect <name> | 詳細情報確認 |
docker volume rm <name> | ボリューム削除 |
docker volume prune | 未使用ボリュームの削除 |
docker-composeでのNamed Volume定義
複数コンテナを扱う場合は、docker-compose.yml
に定義するのが便利です。
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
volumes:
- mydata:/usr/share/nginx/html
volumes:
mydata:
起動コマンド:
docker compose up -d
この定義により、mydata
という名前のボリュームが自動的に作成・マウントされます。
トラブルシューティング:ボリュームの内容を確認する
Named Volumeはホスト上では /var/lib/docker/volumes/<name>/_data
に保存されます。
内容を確認するには以下のようにします:
sudo ls /var/lib/docker/volumes/mydata/_data
※Root権限が必要です。
まとめ
- Named Volumeはデータ永続化の基本的な仕組み
- コンテナを削除してもデータは保持される
- Docker Composeで容易に再利用できる
- チーム開発や本番運用環境では必須の概念
次のステップ
- Bind Mountとの違いを学ぶ
- Volume Driver(例:NFS、S3互換ストレージ)を利用してリモート永続化
- CI/CD環境でボリュームを使ったテストデータ管理を実践
コメントを残す