🐳

【Docker基本】Dockerボリューム技術の理解と実践

に公開

Dockerでは、データの永続化コンテナ間のデータ共有を実現するために「ボリューム(Volume)」という仕組みが用意されています。本記事では、Dockerボリュームの基本から、実践的な使い方、他の方式との違いまでを丁寧に解説します。


📌 1. Dockerボリュームとは?

Dockerボリュームとは、コンテナのライフサイクルとは独立した永続的なデータ保存領域のことです。通常、ホストマシンの特定ディレクトリにデータが保存され、コンテナが停止・削除されてもデータが消えない仕組みです。


🔍 2. ボリュームの特徴

特徴 説明
永続性 コンテナを削除してもデータは保持される
データ共有 複数のコンテナで同じボリュームを共有できる
バックアップが容易 ボリューム単位でバックアップ・リストア可能
パフォーマンスに優れる バインドマウントよりも高速で安全
CLIで簡単操作 docker volume コマンドで管理が容易

⚙️ 3. ボリュームの基本操作

✅ ボリュームの作成

docker volume create my_volume

✅ ボリュームの一覧表示

docker volume ls

✅ コンテナにマウントして使用

docker run -d -v my_volume:/app/data --name my_container ubuntu

この例では、ホスト側の my_volume をコンテナの /app/data にマウントしています。


🗂️ 4. ボリュームの保存場所

Linux環境の場合、Dockerボリュームは以下のような場所に保存されます:

/var/lib/docker/volumes/<ボリューム名>/_data

ただし、直接操作するのではなく、CLIから管理することが推奨されています。


🔄 5. バインドマウントとの違い

比較項目 ボリューム (Volume) バインドマウント (Bind Mount)
管理主体 Dockerが内部で管理 ユーザーが明示的にパスを指定
パスの指定 自動的に決まる 任意のホストパスを使用
可搬性 高い(環境間で再利用しやすい) 低い(ホスト依存)
セキュリティ 高い(Dockerが管理) 権限管理の考慮が必要
用途例 データベース、キャッシュなど 開発中のコード同期など

🧪 6. 実践例:MySQLとボリュームの連携

docker run -d \
  --name mysql_container \
  -e MYSQL_ROOT_PASSWORD=my-secret-pw \
  -v mysql_data:/var/lib/mysql \
  mysql:8

この例では、mysql_data というボリュームにMySQLのデータを保存することで、コンテナを削除してもデータが残るようになります。


🧼 7. 不要なボリュームのクリーンアップ

✅ 使われていないボリュームを一括削除

docker volume prune

✅ 特定のボリュームを削除

docker volume rm my_volume

✅ まとめ

ポイント 内容
ボリュームは永続的なデータ保存手段 コンテナ削除後もデータが保持される
複数のコンテナで共有可能 同じボリュームを読み書きできる
バックアップ・復元がしやすい CLIから管理可能
バインドマウントより安定性と可搬性が高い

Discussion