はじめに
Dockerを利用したアプリケーション開発や運用では、コンテナの再作成やスケールアウトが容易な一方で、データの永続化とバックアップは軽視されがちです。
特に、データベースや設定ファイル、ボリューム上のユーザーデータなどを扱う際には、適切なバックアップ・リストア戦略が欠かせません。
本記事では、Docker環境でのバックアップとリストア方法を体系的に解説します。
1. Docker環境におけるバックアップ対象の理解
Dockerにおけるバックアップ対象は、大きく以下の3つに分類されます。
- コンテナ構成情報
- Dockerfile
- docker-compose.yml
- イメージタグや環境変数設定
- アプリケーションデータ
- データベース(MySQL、PostgreSQLなど)
- 永続化されたボリューム(
docker volume
)
- 環境設定・ネットワーク構成
- カスタムネットワーク設定
.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. リストア手順の体系化
バックアップを取るだけでなく、定期的なリストアテストを行うことが重要です。
リストア手順の基本構成:
- 必要なイメージの再ロード
- 永続ボリュームの再作成
- バックアップデータの展開
- コンテナの再起動と検証
例:
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は「不変なアプリケーション環境」を提供しますが、データそのものは不変ではありません。
コンテナを超えて永続化・バックアップ・リストアを意識した設計を行うことで、障害や再デプロイ時も安心して運用できます。
コメントを残す