1

「展開」を簡単にカプセル化して、スナップショットを取得できるようにする方法を探しています。

  • ホスト間の転送
  • 以前の時点 (スナップショット) に復元する機能

私は主に VPS プロバイダー (Xen/KVM) を使用していますが、ファイルシステムでの LVM のセットアップを制御することはできません。現時点では、アプリケーションを迅速かつ簡単にデプロイするために Docker (LXC をラップ) を使用していますが、通常はコンテナー内ではなく VM ファイルシステムに「状態」情報をマウントします。このようにして、サーバーがクラッシュ/再起動しても、何も失うことはありません。その後、移動するたびにこの情報を手動で取得/パッケージ化する必要があり、LVM などのポイントインタイム リストアのオプションはありません。

ある時点でコンテナーを「コミット」できるように、状態をコンテナーに移動してから、コンテナーを保存/転送/ロードするだけでホストを移動できます。これにより、コミットから生成されたイメージを使用して特定の時点に復元することもできますdocker runが、これはやや危険であり、「悪い習慣」のように感じます。私は、コンテナを「独り占め」させないように言われました。仮想ファイルシステムなどの代替手段や、ドッカーコンテナー内の状態を残す「安全な」方法を知っている人はいますか?

4

1 に答える 1

1

データのみのコンテナーの「ベスト プラクティス」を探していると思います。

データとアプリを 2 つのコンテナーに分離する必要があります。実際には、状態 fe をアプリのファイル システムの /data にのみ保存する必要があります。このようにして、アプリ コンテナー/イメージとは完全に独立して、必要なときにデータ コンテナー (/data にマウント) をコミットできます。

# create data volume "app-data"
sudo docker run -name app-data -v /data busybox true
# container exits immediately, it does not matter

sudo docker run --volumes-from app-data your-image

編集:

app-data コンテナーはいつでも新しいイメージに commit できますが、このイメージは commit するたびに busybox に基づいています。

残念ながら、docker commit によって app-data ボリュームをコミットすることはできず、docker export によって app-data ボリュームを (docker export によって) エクスポートすることはできません (このを参照)。

EDIT2:

ボリューム ディレクトリの tar を新しいコンテナーから stdout にパイプすることで、app-data コンテナーをエクスポートできます (ベースの ubuntu イメージは問題ありません)。

sudo docker run --volumes-from app-data ubuntu tar -cO /data/ | gzip -c > snapshot.tgz

(スペースを節約するために) 増分バックアップを作成する場合は、tar を使用して増分バックアップのみの変更を行うことができます。

sudo docker run --volumes-from app-data ubuntu tar -cO /data/ -g /data/.tar.snar --exclude .tar.snar| gzip -c > snapshot-`date -u "+%F-%T"`.tgz

これにより、/data ディレクトリの増分スナップショットが作成されます。削除されたファイルは記録されず、変更されたファイルまたは新しいファイルのみが記録されます。バックアップを実行する前に /data/.tar.snap ファイルを削除することで、いつでもフル バックアップを作成できます。

データ/状態がどのように構成されているかはわかりませんが、テキスト構成ファイルの場合、スナップショットと /data ディレクトリ (コンテナー内: git init /datagit add . && git commit -a -m "snapshot") のバージョン管理には git を使用し、バックアップと転送には docker export を使用します。

この関連リンクを参照してください。

于 2014-02-02T09:11:53.503 に答える