Docker環境を運用していると、イメージやコンテナ内のデータを別のマシンに移行する必要が生じることがあります。以下では、Linux環境でDockerのイメージおよび永続データをバックアップし、別の環境に復元・移行する基本的な手順を紹介します。
1. Dockerイメージのバックアップ
1.1 docker saveによるイメージのエクスポート
docker saveコマンドを使うと、既存のイメージをtar形式のアーカイブとして保存できます。
docker save -o backup-image.tar myapp:v1
このコマンドはmyapp:v1イメージをbackup-image.tarファイルに保存します。複数のイメージも一度に指定可能です。
1.2 コンテナの変更を含むイメージ作成(docker commit)
実行中のコンテナに加えられた変更を新しいイメージとして保存するには、docker commitを使用します。
docker commit -a "admin@example.com" -m "config updated" web-container myapp:backup-v1
これにより、web-containerの現在の状態がmyapp:backup-v1という新しいイメージとして登録されます。
2. コンテナ内データのバックアップ
2.1 docker cpでファイルをホストにコピー
特定のファイルやディレクトリをコンテナからホストマシンにコピーするには、docker cpが最も簡単です。
docker cp web-container:/app/data /mnt/backups/app-data
上記はweb-container内の/app/dataディレクトリをホストの/mnt/backups/app-dataにコピーします。
2.2 ボリュームマウントを使ったバックアップ
一時的なコンテナを起動し、ボリュームをマウントしてデータをコピーすることも可能です。
docker run --rm -v /mnt/backups:/backup -v app-data-volume:/source alpine tar czf /backup/data-$(date +%F).tar.gz -C /source .
この例では、名前付きボリュームapp-data-volumeの内容を圧縮して、日付付きのtar.gzファイルとして/mnt/backupsに保存します。--rmオプションにより、処理終了後にコンテナは自動削除されます。
3. 別環境への移行
3.1 イメージのインポート(docker load)
バックアップしたtarファイルを新しい環境で読み込むには、docker loadを使用します。
docker load -i backup-image.tar
これにより、元のイメージがDockerローカルレジストリに復元されます。
3.2 データのリストア
バックアップしたデータを新しいコンテナに復元するには、逆方向のdocker cpまたはボリューム初期化を利用します。
docker run --rm -v restored-data:/target -v /mnt/backups:/backup alpine tar xzf /backup/data-2024-06-01.tar.gz -C /target
このコマンドは、バックアップされたtar.gzファイルを名前付きボリュームrestored-dataに展開します。その後、このボリュームを本番コンテナにマウントして使用できます。