Dockerのバックアップとリストア戦略:コンテナ時代のデータ保全術

はじめに

Dockerを利用したアプリケーション開発や運用では、コンテナの再作成やスケールアウトが容易な一方で、データの永続化とバックアップは軽視されがちです。
特に、データベースや設定ファイル、ボリューム上のユーザーデータなどを扱う際には、適切なバックアップ・リストア戦略が欠かせません。
本記事では、Docker環境でのバックアップとリストア方法を体系的に解説します。


1. Docker環境におけるバックアップ対象の理解

Dockerにおけるバックアップ対象は、大きく以下の3つに分類されます。

  1. コンテナ構成情報
    • Dockerfile
    • docker-compose.yml
    • イメージタグや環境変数設定
  2. アプリケーションデータ
    • データベース(MySQL、PostgreSQLなど)
    • 永続化されたボリューム(docker volume
  3. 環境設定・ネットワーク構成
    • カスタムネットワーク設定
    • .env ファイル
    • Secret、Config(Swarm/Kubernetes使用時)

2. ボリュームデータのバックアップ方法

(1) docker run で一時コンテナを使う方法

ボリュームはコンテナを削除しても残るため、tarを使って簡単にバックアップできます。

docker run --rm \
  -v my_data:/data \
  -v $(pwd):/backup \
  alpine tar czf /backup/my_data_backup.tar.gz -C /data .

これにより、my_data ボリューム内の内容が my_data_backup.tar.gz として保存されます。

(2) docker cp を使った直接バックアップ

もしデータがコンテナ内に格納されている場合は、以下のようにしてコピー可能です。

docker cp <container_id>:/var/lib/mysql ./mysql_backup

3. イメージと構成ファイルのバックアップ

(1) Dockerイメージをエクスポートする

カスタムビルドしたイメージを保持しておきたい場合、docker saveを使用します。

docker save myapp:latest > myapp_backup.tar

復元時には以下のようにロードします。

docker load < myapp_backup.tar

(2) Compose構成ファイルのバージョン管理

docker-compose.yml.envファイルなどの設定は、Gitリポジトリで管理することが最も安全です。
これにより、構成の変更履歴とともにいつでもリストアが可能になります。


4. データベースのバックアップ戦略

(1) MySQLの場合

バックアップ:

docker exec mysql-container mysqldump -u root -p mydb > backup.sql

リストア:

docker exec -i mysql-container mysql -u root -p mydb < backup.sql

(2) PostgreSQLの場合

バックアップ:

docker exec postgres-container pg_dump -U postgres mydb > backup.sql

リストア:

docker exec -i postgres-container psql -U postgres -d mydb < backup.sql

5. リストア手順の体系化

バックアップを取るだけでなく、定期的なリストアテストを行うことが重要です。

リストア手順の基本構成:

  1. 必要なイメージの再ロード
  2. 永続ボリュームの再作成
  3. バックアップデータの展開
  4. コンテナの再起動と検証

例:

docker volume create my_data
docker run --rm \
  -v my_data:/data \
  -v $(pwd):/backup \
  alpine tar xzf /backup/my_data_backup.tar.gz -C /data

6. 自動バックアップの仕組み化

(1) cron + Docker でスケジュール実行

ホスト上で cron ジョブを設定し、定期的に docker exec を実行してバックアップを自動化できます。

(2) GitHub Actions や CI/CD に組み込む

クラウドバックアップやリモートへのアップロードをCIパイプラインに組み込むことで、継続的データ保全が可能になります。


7. ベストプラクティスまとめ

  • 構成はGitで、データはボリュームで管理
  • バックアップとリストア手順をドキュメント化
  • リストアテストを自動化
  • S3やクラウドストレージへの外部保存を検討
  • コンテナ再作成の容易さを前提に設計

まとめ

Dockerは「不変なアプリケーション環境」を提供しますが、データそのものは不変ではありません。
コンテナを超えて永続化・バックアップ・リストアを意識した設計を行うことで、障害や再デプロイ時も安心して運用できます。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

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