DESIGN / CODE / INFRA / AI

解説

Dockerボリュームはバックアップ?永続化と復元準備の違い

コンテナを作り直しても残るデータと、事故から戻せるデータは別。DBとアップロード画像の保護を整理するよ。

Dockerボリュームはバックアップ?永続化と復元準備の違い

コンテナを消してもデータが残ると、安心するよね。でも、残ることと、壊れたときに戻せることは別なんだ。

Dockerボリュームはバックアップ?永続化と復元準備の違いの解説図

図:永続化しているだけでは、誤削除・破損・保存先の喪失から戻せるとは限らない。

ボリュームは保存場所

名前付きボリュームを使うと、コンテナのライフサイクルからデータを分離できるよ。ただし、その保存先を失ったり、中のデータを誤って変更したりすると、以前の状態へ戻せるとは限らない。

services:
  db:
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

これはPostgreSQL 17の一般的なデータ保存先を使う構成例。別バージョンやイメージでは保存先も確認してね。

保存するものを分けて書き出そう

対象 保存したいもの
データベース 本文、設定、ユーザー情報など
アップロード 記事画像、添付ファイル
コード アプリ、スキーマ、依存の固定情報
秘密情報 復元に必要な鍵・環境設定を適切な保管先へ

Gitでコードを保存しても、DBの本文や画像まで含まれるとは限らないよ。逆に、秘密情報をGitへ入れて解決しないようにしよう。

稼働中DBのコピーには注意

データファイルを稼働中にそのままコピーすると、整合性を保ったバックアップにならない場合があるよ。DBが提供するバックアップ方法を使うか、停止・スナップショットなどの条件を確認しよう。この記事では、未検証のDBコピーコマンドは載せないよ。

バックアップができたら復元を試す

別の検証環境で、本文が読めるか、画像が出るか、必要な権限や設定が戻るかを確かめよう。復元した時刻と、失ってよい更新の範囲も記録しておくと判断しやすい。

普段の停止でdocker compose down -vを使うと、対象の名前付きボリュームも削除されるので注意してね。削除操作をバックアップ手順に混ぜず、保存と復元の確認を先に行おう。

参考・出典

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。