Dockerでデータベースを永続化する方法:データが消えないコンテナ設計

はじめに

DockerでMySQLやPostgreSQLなどのデータベースを構築する際、コンテナを削除するとデータも一緒に消えてしまうという問題に直面することがあります。
この問題を解決するためには、**「データの永続化」**が重要です。
この記事では、Dockerのボリューム機能を活用してデータを安全に保持する方法を解説します。


1. なぜ永続化が必要なのか

Dockerコンテナは基本的に**「使い捨て」**の設計です。
そのため、docker rmや再デプロイを行うと、内部のデータは消えてしまいます。

たとえば次のようなケースです:

docker run --name mydb -e MYSQL_ROOT_PASSWORD=root -d mysql:8

このコンテナを削除して再作成すると、MySQL内部のテーブルやデータはすべて失われます。
これを防ぐには、データディレクトリをホスト側にマウントする必要があります。


2. ボリュームを使った永続化

Dockerには2種類の永続化方法があります。

(1) 名前付きボリューム

Dockerが自動で管理するストレージ領域を使う方法です。

docker volume create mysql_data

docker run -d \
  --name mysql_server \
  -e MYSQL_ROOT_PASSWORD=root \
  -v mysql_data:/var/lib/mysql \
  mysql:8

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

(2) バインドマウント

ホストの特定ディレクトリを直接マウントする方法です。

mkdir -p ~/docker/mysql_data

docker run -d \
  --name mysql_local \
  -e MYSQL_ROOT_PASSWORD=root \
  -v ~/docker/mysql_data:/var/lib/mysql \
  mysql:8

この方法では、ホスト上の~/docker/mysql_dataにデータが書き込まれるため、直接バックアップや編集が可能です。


3. docker-composeでの永続化設定

複数コンテナを扱う場合は、docker-compose.ymlを使って管理するのが便利です。

version: '3.8'
services:
  db:
    image: mysql:8
    container_name: mysql_db
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: app_db
    volumes:
      - db_data:/var/lib/mysql
    ports:
      - "3306:3306"
volumes:
  db_data:

docker-compose up -dで起動後、docker-compose downしてもdb_dataボリュームは残るため、再度upすれば同じデータを参照できます。


4. データ永続化のベストプラクティス

  1. バックアップを定期的に取得する
    永続化しても障害は起こり得るため、mysqldumppg_dumpを使って定期的にバックアップしましょう。
  2. ボリュームを明示的に管理する
    docker volume lsdocker volume inspectで状態を確認し、不要なボリュームを削除する習慣を。
  3. 本番環境ではバインドマウントよりも名前付きボリュームを推奨
    OS依存が少なく、コンテナ移動が容易になるためです。

5. トラブルシューティング

  • 権限エラーが出る場合は、ホストディレクトリの権限を確認。
    例:sudo chown -R 999:999 ~/docker/mysql_data(MySQL UIDに合わせる)
  • ボリュームのデータ確認
    docker run -it --rm -v mysql_data:/data alpine sh
    /data配下で中身を確認可能。

6. 次のステップ

永続化の基礎を理解したら、以下のステップに進むとより実践的です。

  • docker-composeアプリ+DB構成(例:Node.js + MySQL)を構築
  • バックアップ自動化(cron + dump)
  • クラウドストレージ連携によるデータ保全(AWS S3など)

まとめ

Dockerでデータベースを安全に運用するには、ボリュームによる永続化が不可欠です。
コンテナの再作成や更新が頻繁な環境でも、適切なボリューム設定によりデータを確実に保持できます。
本番運用では、ボリューム管理・バックアップ・セキュリティまで含めた包括的な運用設計が鍵となります。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です