【保存される場所、分かってますか?】Dockerボリュームの仕組みと使い方を完全解説!

Docker

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/datamy_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

pruneは便利ですが、削除されたデータは復旧できません
実行前に必要なデータがないか確認しましょう!

安全な削除手順

  1. 使用中のコンテナを確認docker ps
  2. ボリューム一覧を確認docker volume ls
  3. 本当に不要か確認docker volume inspect ボリューム名
  4. 削除実行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 -vdocker-composeで簡単に利用可能
  • コンテナを削除してもデータが残るので、再利用が簡単
  • バインドマウントとの違いを理解して使い分けよう
  • 不要になったボリュームはpruneで整理!

学習の順番

  1. 基本的なボリューム作成docker volume create
  2. ボリュームのマウント-vオプションの使い方
  3. Docker Composeでの活用:複数コンテナでのデータ共有
  4. バックアップと復元:大切なデータの保護

コメント

タイトルとURLをコピーしました