Dockerを使っていて、こんな経験はありませんか?
- コンテナを削除したら、中のデータも消えてしまった…
- コンテナを再起動したら設定ファイルが初期化された…
- 複数のコンテナで同じデータを使いたいけど、うまく共有できない…
この原因は、「ボリューム(Volume)」を正しく使えていないことがほとんどです。
Dockerでは、コンテナの中のデータは一時的なものです。保存しておきたいなら、ボリュームを使うのが基本です。
この記事では、Dockerボリュームの基本から実践的な使い方まで、具体例を交えて分かりやすく解説します!
Dockerボリュームとは?基本概念を理解しよう

ボリュームって何?
Dockerのボリューム(volume)とは、コンテナとは別に存在するデータの保管場所です。
普通、コンテナの内部に書き込んだデータは、コンテナを削除すると一緒に消えてしまいます。
でも、ボリュームを使えばそのデータを永続的に保存できます。
身近な例で考えてみよう
- コンテナ:賃貸アパートの部屋
- ボリューム:貸し倉庫
アパートを引っ越すとき、部屋の中のものは持っていけませんが、貸し倉庫の荷物は新しい部屋でも使い続けられますよね。
それと同じ仕組みです。
ボリュームの利点
メリット | 説明 |
---|---|
データが消えない | コンテナを削除してもデータが残る |
データ共有ができる | 複数のコンテナで同じデータを使える |
安全性が高い | Dockerが管理するので、ミスが起こりにくい |
バックアップしやすい | データの場所が分かりやすい |
Dockerボリュームの作成とマウント方法【基本操作】
ボリュームを作る
# my_volumeという名前のボリュームを作成
docker volume create my_volume
作ったボリュームを確認する
# ボリューム一覧を表示
docker volume ls
ボリュームを使う(マウント)
# ボリュームをコンテナにマウントして起動
docker run -d \
--name my_container \
-v my_volume:/app/data \
nginx
解説:
-v my_volume:/app/data
:my_volume
をコンテナ内の/app/data
という場所に接続する- これで、
/app/data
に保存したファイルはmy_volume
に保存される
データが本当に残るか確認してみよう
# コンテナを削除
docker rm -f my_container
# 新しいコンテナで同じボリュームを使用
docker run -it --rm -v my_volume:/app/data ubuntu bash
# コンテナ内で ls /app/data を実行すると、前のデータが残っている!
このように、ボリュームはコンテナとは別に管理されます。
Docker Composeでボリュームを使う方法

複数のコンテナを管理するdocker-compose.ymlでも、ボリュームはよく使われます。
docker-compose.ymlの例
version: '3'
services:
web:
image: nginx
volumes:
- web_data:/usr/share/nginx/html
database:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
web_data:
db_data:
この設定では:
web_data
ボリュームがNginxの Web ファイル用db_data
ボリュームがMySQLのデータベース用
Docker Composeでの操作
# 構成を起動
docker-compose up -d
# ボリューム一覧を確認
docker volume ls
# ボリュームの詳細情報を確認
docker volume inspect プロジェクト名_web_data
ボリュームとバインドマウントの違いとは?
Dockerでデータを保存する方法は、実は2つあります。
項目 | ボリューム | バインドマウント |
---|---|---|
管理場所 | Dockerが管理 | ホストの指定したフォルダ |
使用方法 | -v volume_name:/path | -v /host/path:/container/path |
用途 | 永続データの保存 | 開発中のコード共有 |
セキュリティ | 高い | 普通 |
使いやすさ | 簡単 | 柔軟だが複雑 |
バインドマウントの例
# ホストの現在のディレクトリをコンテナにマウント
docker run -it --rm -v $(pwd):/workspace ubuntu bash
使い分けのコツ
- 開発中:バインドマウント(コードをリアルタイムで編集したい)
- 本番環境:ボリューム(安全性を重視)
不要なボリュームの削除とクリーンアップ方法
特定のボリュームを削除
# 使用中でないボリュームを削除
docker volume rm my_volume
使っていないボリュームをまとめて削除
# 未使用ボリュームを一括削除
docker volume prune
安全な削除手順
- 使用中のコンテナを確認:
docker ps
- ボリューム一覧を確認:
docker volume ls
- 本当に不要か確認:
docker volume inspect ボリューム名
- 削除実行:
docker volume rm ボリューム名
実践的な使用例
Webサイトのデータを保存
# HTMLファイルを保存するボリューム付きでNginxを起動
docker run -d \
--name my_website \
-p 8080:80 \
-v website_files:/usr/share/nginx/html \
nginx
# ボリュームにHTMLファイルをコピー
docker cp index.html my_website:/usr/share/nginx/html/
データベースのデータを保存
# データベースのデータを保存するボリューム付きでMySQLを起動
docker run -d \
--name my_database \
-v mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=secret \
mysql:8.0
よくある質問と対処法

ボリュームの中身を確認したい
# ボリュームの詳細情報を表示
docker volume inspect my_volume
# ボリュームの中身を確認
docker run --rm -v my_volume:/data ubuntu ls -la /data
ボリュームをバックアップしたい
# ボリュームをtar形式でバックアップ
docker run --rm -v my_volume:/data -v $(pwd):/backup ubuntu \
tar czf /backup/backup.tar.gz -C /data .
ボリュームを復元したい
# バックアップからボリュームを復元
docker run --rm -v my_volume:/data -v $(pwd):/backup ubuntu \
tar xzf /backup/backup.tar.gz -C /data
まとめ:Dockerボリュームを使いこなせば、データ管理は怖くない!
重要なポイント
- ボリュームは「コンテナとは別に存在するデータ置き場」
docker run -v
やdocker-compose
で簡単に利用可能- コンテナを削除してもデータが残るので、再利用が簡単
- バインドマウントとの違いを理解して使い分けよう
- 不要になったボリュームは
prune
で整理!
学習の順番
- 基本的なボリューム作成:
docker volume create
- ボリュームのマウント:
-v
オプションの使い方 - Docker Composeでの活用:複数コンテナでのデータ共有
- バックアップと復元:大切なデータの保護
コメント