私はDockerを使用していくつかのサービスをCentOS 6.4サーバーにデプロイし、それらが生成するデータを適切にバックアップする方法を見つけようとしています。
たとえば、サービスの1つは、ユーザーがファイルをアップロードできるWebアプリケーションです。このコンテナには、/files
バックアップしたいボリューム。 このブログの投稿 と ボリュームのdockerドキュメント で述べられているように、ホストマウントは移植性がまったくないため、ホストマウントは多少不快に思われます。
同じブログ投稿から、ボリュームのファイルにアクセスするためにホストマウントを必要としない必要がないことがわかっているので、docker inspect
ファイルの場所を確認します。
しかし、これが私の問題です。コンテナーとそれに関連付けられたボリュームを構築するために必要なdockerfileだけをバックアップすることを考えていました。バックアップからすべてを復元する必要があると思われる場合、どのボリュームディレクトリがどのコンテナーに対応するかを知るにはどうすればよいですか?コンテナーを再構築すると、IDとボリュームパスが変更されるため、それらを一致させるために追加情報が必要になります。他に何かあれば、実際にすべてを復元できるようにバックアップする必要がありますか?
あなたが正しい。独自のボリュームを持つ複数のコンテナーを持つことができるので、どのボリュームがどのコンテナーに対応するかを追跡する必要があります。その方法はセットアップによって異なります。私はデータコンテナーに-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 -
したがって、これはバックアップが必要であることを意味します。
更新:その間、私はコンテナーとそのボリューム(コンテナー)をバックアップするツールを作成しました: 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