web-dev-qa-db-ja.com

Dockerボリュームのバックアップと復元

私はDockerを使用していくつかのサービスをCentOS 6.4サーバーにデプロイし、それらが生成するデータを適切にバックアップする方法を見つけようとしています。

たとえば、サービスの1つは、ユーザーがファイルをアップロードできるWebアプリケーションです。このコンテナには、/filesバックアップしたいボリューム。 このブログの投稿ボリュームのdockerドキュメント で述べられているように、ホストマウントは移植性がまったくないため、ホストマウントは多少不快に思われます。

同じブログ投稿から、ボリュームのファイルにアクセスするためにホストマウントを必要としない必要がないことがわかっているので、docker inspectファイルの場所を確認します。

しかし、これが私の問題です。コンテナーとそれに関連付けられたボリュームを構築するために必要なdockerfileだけをバックアップすることを考えていました。バックアップからすべてを復元する必要があると思われる場合、どのボリュームディレクトリがどのコンテナーに対応するかを知るにはどうすればよいですか?コンテナーを再構築すると、IDとボリュームパスが変更されるため、それらを一致させるために追加情報が必要になります。他に何かあれば、実際にすべてを復元できるようにバックアップする必要がありますか?

23
fcoelho

あなたが正しい。独自のボリュームを持つ複数のコンテナーを持つことができるので、どのボリュームがどのコンテナーに対応するかを追跡する必要があります。その方法はセットアップによって異なります。私はデータコンテナーに-dataという名前を使用しているため、イメージがどのコンテナーに属しているかは明らかです。そうすれば、次のようにバックアップできます。

VOLUME=`docker inspect $NAME-data | jq '.[0].Volumes["/path/in/container"]'`
tar -C $VOLUME . -czvf $NAME.tar.gz

これで、イメージを再構築してデータコンテナーを再作成するだけです。

cat $NAME.tar.gz | docker run -name $NAME-data -v /path/in/container \
                              -i busybox tar -C /path/int/container -xzf -

したがって、これはバックアップが必要であることを意味します。

  • Dockerfile
  • volume
  • コンテナ内のボリュームパス
  • ボリュームが属するコンテナの名前

更新:その間、私はコンテナーとそのボリューム(コンテナー)をバックアップするツールを作成しました: https:/ /github.com/discordianfish/docker-backup およびバックアップを作成してs3にプッシュできるバックアップイメージ: https://github.com/discordianfish/docker-lloyd

新しいDocker(1.9.1, build 9894698でテスト済み)では、 cpコマンド を使用できます。

以下は、コンテナからホストにディレクトリをコピーする方法の例です。

docker cp wordpress:/var/www/html backups/wordpress.`date +"%Y%m%d"`/

以下は、コンテナからtarファイルにディレクトリをコピーする方法の例です。

docker cp wordpress:/var/www/html - > backups/wordpress.`date +"%Y%m%d"`.tar

最後になりましたが、コンテナからtar.gzファイルにディレクトリをコピーする方法の例:

docker cp wordpress:/var/www/html - | gzip > backups/wordpress.`date +"%Y%m%d"`.tar.gz
5
czerasz