Docker | 2週間で実務レベルに到達するDocker学習:データ永続化(ボリューム) - Day6

Docker Docker
スポンサーリンク

Day6:データ永続化(ボリューム)中盤

テーマ:ボリュームの種類・仕組み・実務での使い分けを深掘りし、“データが消えない環境”を自分で設計できるようになる

中盤では、前半で学んだ
「ボリューム=コンテナの外にあるデータ保存領域」
という基礎をさらに深掘りし、実務で必ず必要になる

  • ボリュームの種類
  • 使い分け
  • 具体的な動作イメージ
  • docker-compose での永続化

を理解していきます。

ここを理解すると、あなたは
「データが消えない Docker 環境」を自分で設計できるエンジニア
になります。


ボリュームには3種類ある

名前付きボリューム(named volume)

例:

docker volume create mydata

特徴:

  • 名前がついている
  • コンテナを消しても残る
  • 実務で最もよく使う
  • MySQL や PostgreSQL の永続化に最適

匿名ボリューム(anonymous volume)

例:

docker run -v /app/node_modules node

特徴:

  • 名前がない
  • Docker が勝手に名前をつける
  • コンテナ削除時に残るが、管理しづらい
  • Node.js の node_modules などに使う

bind mount(マウント)

例:

docker run -v $(pwd):/app node

特徴:

  • ホストのフォルダをそのまま使う
  • 開発用(ホットリロード)に最適
  • データ永続化にはあまり使わない

名前付きボリュームが“データ永続化の主役”である理由

コンテナと完全に独立している

名前付きボリュームは、
コンテナとは別の場所に保存される
ため、コンテナを削除してもデータは残ります。

Docker が安全に管理してくれる

ホスト側のパスを意識する必要がなく、
Docker が安全に保存場所を管理します。

実務で最も使われる

特にデータベースでは必須です。

例:

  • MySQL
  • PostgreSQL
  • Redis
  • MongoDB

これらはすべて 名前付きボリュームで永続化 します。


ボリュームの実体を“目で見て理解する”

ボリュームの一覧を見る

docker volume ls

ボリュームの実体の場所を確認

docker volume inspect mydata

出力例(概念的):

"Mountpoint": "/var/lib/docker/volumes/mydata/_data"

ここが 実際のデータ保存場所 です。

つまり:

  • コンテナは消えても
  • /var/lib/docker/volumes/mydata/_data は残る

これが永続化の仕組みです。


ボリュームを使った“実務レベルの MySQL 永続化”

MySQL のデータディレクトリをボリュームに紐づける

docker run -d \
  --name mydb \
  -v mydata:/var/lib/mysql \
  mysql:8

ポイント:

  • /var/lib/mysql は MySQL のデータ保存場所
  • ここを mydata に紐づけることで永続化が成立

動作イメージ

  1. MySQL がデータを /var/lib/mysql に保存
  2. そのフォルダが mydata にマウントされている
  3. コンテナを削除しても mydata は残る
  4. 新しい MySQL コンテナを作っても mydata を再利用できる

docker-compose で永続化を設定する

実務では docker run を使わず、
docker-compose.yml に永続化を記述します。

services:
  db:
    image: mysql:8
    volumes:
      - mydata:/var/lib/mysql

volumes:
  mydata:
YAML

この構成のメリット

  • docker compose up だけで永続化が自動で設定される
  • チーム全員が同じ構成を再現できる
  • ボリュームの管理が簡単

ボリュームの“よくある誤解”を深掘りして解消する

「コンテナを削除したらデータも消えるのでは?」

ボリュームはコンテナとは別物なので消えません。

「ボリュームはどこに保存されているの?」

/var/lib/docker/volumes/<名前>/_data に保存されています。

「bind mount とボリュームは何が違う?」

→ bind mount はホストのフォルダを直接使う
→ ボリュームは Docker が管理する専用領域

「本番環境でもボリュームを使うの?」

→ 使います。
特に DB は必須です。


中盤まとめ

あなたがここまで理解できていれば、中盤はクリアです。

  • ボリュームには「名前付き」「匿名」「bind mount」の3種類がある
  • データ永続化には名前付きボリュームを使う
  • MySQL の /var/lib/mysql をボリュームに紐づけるとデータが残る
  • docker-compose で永続化を設定すると再現性が高い
  • ボリュームはコンテナとは独立しているため削除しても消えない
タイトルとURLをコピーしました