Dockerのバックアップでは、単に再取得可能なメディアファイルだけでなく、デプロイ定義、アプリケーションの状態、データベース、認証情報、復旧手順を保持する必要があります。
映画、音楽、写真は最大のデータセットになるかもしれません。しかし、Composeファイル、アプリデータベース、メタデータ、ユーザーアカウント、証明書、暗号化キー、マウント設定を失うと、ライブラリが使えなくなったり、再構築に数週間かかったりすることがあります。信頼できるバックアップは、「空のホスト上でサービスを再作成するために、何が存在していなければならないか」という問いから始まり、必要な各レイヤーをアプリケーション整合性のある方法で保護します。
デプロイ定義をバックアップする
コンテナを再作成するために必要なすべてのComposeファイル、オーバーライドファイル、Dockerfile、ビルドコンテキスト、スタック名、イメージタグ、コマンド、ポートマッピング、ネットワーク、ボリューム定義、ヘルスチェック、再起動ポリシー、リソース制限を保持します。
セルフホスティングに関するある議論では、各アプリケーションのComposeファイルと環境ファイルをまとめて保管し、スタックを予測どおりに再デプロイできるようにする方法が説明されています。これにより、実行中のコンテナをドキュメント代わりにするのではなく、デプロイ設定を主要なバックアップ資産として扱えます。
latestのような可変タグだけでなく、正確なイメージバージョンを記録します。適切な場合は設定をバージョン管理に保存しますが、シークレットは公開リポジトリから除外し、必要な外部依存関係の保護された一覧を含めます。
すべての永続バインドマウントと名前付きボリュームを保護する
各サービスに接続されているマウントを一覧化し、再作成可能なキャッシュ、アプリケーション設定、メタデータ、データベース、アップロードコンテンツ、生成されたサムネイル、重要な状態に分類します。再作成できないパスをすべてバックアップします。
OpenMediaVaultに関するある議論では、重要な復旧対象はCompose定義と永続データであり、コンテナイメージは通常再ダウンロードできると説明されています。これは、永続的な状態と再取得可能なコンテナイメージを区別するものです。
大容量のライブラリマウントだけでなく、隠しアプリケーションディレクトリや小容量のメタデータボリュームも含めます。バインドマウントのソースパスがホストのバックアップ対象に含まれていることを確認し、名前付きボリュームは所有者とアクセス権を保持できる方法でエクスポートします。
データベース整合性のあるバックアップを作成する
PostgreSQL、MariaDB、MySQL、MongoDB、SQLite、Redisの永続化データ、組み込みデータベースを特定します。トランザクションの変更中にファイルをコピーするのではなく、データベースがサポートするダンプ、スナップショット、または静止状態でのバックアップ処理を使用します。
Stack OverflowのDockerボリュームバックアップに関する議論では、一時コンテナにボリュームをマウントしてアーカイブを作成する方法が紹介されています。ただし、データベースファイルには整合性への配慮が必要です。単なるボリュームアーカイブが、トランザクション整合性のある有効なデータベースバックアップになるとは限りません。
エンジンのバージョン、データベース名、ユーザー、拡張機能、復元順序を記録します。ファイルシステムのバックアップとは別に論理ダンプをテストし、一方が不完全でももう一方で復旧できるようにします。
シークレット、証明書、ID情報を保持する
環境変数のシークレット、APIトークン、データベースパスワード、OAuthクライアント認証情報、TLS証明書、秘密鍵、SSHキー、暗号化キー、アプリケーションのリカバリーコードを、保護されたコピーとしてバックアップします。
シークレットは通常のComposeファイルとは分けて保管し、障害が発生したDockerホストに依存しない復旧方法で暗号化します。バックアップには、各シークレットがどのサービスのどの変数を復元するものかを把握できる十分な情報を含めます。
暗号化されたデータベースやストレージの暗号化キーを省略してはいけません。キー、パスフレーズ、またはキー管理設定を失うと、暗号化データを完全にコピーしても復旧できません。
リバースプロキシ、DNS、ジョブ、ホストの前提条件を含める
リバースプロキシのルート、ミドルウェア、アクセス制御、DNSレコード、DDNS設定、スケジュール済みジョブ、更新ポリシー、ファイアウォールルール、GPUデバイスマッピング、UIDとGIDの割り当て、ストレージのマウントユニットを保持します。
あるバックアップ製品の概要では、信頼できるボリューム保護には、スケジュール設定、保持期間、暗号化、保存先の制御、実行履歴の可視化も必要だと強調されています。こうした運用上の詳細により、一度限りのアーカイブが繰り返し実行できるバックアップワークフローになります。
Composeを開始する前に存在していなければならないホストディレクトリ、ネットワーク、カーネル機能、デバイスを文書化します。これらの前提条件がないと、復元されたコンテナが空の代替ディレクトリを作成したり、誤ったアクセス権を使用したり、ハードウェアアクセラレーションなしで起動したりする可能性があります。
空のホストへの復元でバックアップを検証する
バックアップと文書化された手順だけを使用し、分離されたテストホストまたは仮想マシンに復元します。ストレージパス、シークレット、データベース、プロキシルート、コンテナを、記録した順序で再作成します。
ZimaSpaceの共有フォルダを1つだけ安全に復元する方法に関するガイドも、同じ原則を示しています。バックアップは、管理された復元によって対象範囲が実証されて初めて信頼できます。
ログイン、アクセス権、データベースの整合性、メタデータ、サムネイル、再生、アップロード、スケジュール済みジョブ、TLS、2回目の再起動を検証します。復旧時間を記録し、復元によって不足している依存関係が判明したら、バックアップチェックリストを更新します。
サポートとヒント
もっと読む

Dockerボリュームの復元でファイルの内容は再現されるのに、拡張属性が失われるのはなぜですか?
xattr のインベントリ、tar と Rsync のオプション、名前空間、保存先のサポート状況、権限、ラベル、アプリメタデータ、テストを網羅したボリューム復元の診断。

Composeファイルを変更した後も、実行中のコンテナが古いメモリ制限を維持するのはなぜですか?
ライブcgroup、再起動と再作成の違い、Composeのフィールド、ハードリミットとソフトリミット、親スコープ、スワップ、ランタイムヒープを網羅したメモリ制限の診断。

リバースプロキシを再起動すると、1つのセルフホストアプリですべてのセッションが無効になるのはなぜですか?
再起動の範囲、Cookieの所有権、シークレットのローテーション、キャッシュを利用したセッション、スティッキールーティング、認証ゲートウェイ、復旧を網羅したセッション喪失の診断。

