我正在使用Docker在CentOS 6.4服务器上部署一些服务,并试图找出如何正确备份它们生成的数据。
例如,其中一项服务是用户可以上传文件的networking应用程序。 对于这个容器,我有一个/files
我想要备份的/files
卷。 主机挂载看起来像是有点皱眉,因为这样的挂载是不可移植的 – 就像在这篇博客和docker的文档中所说的那样。
我从同一个博客文章知道,我不需要主机装载docker inspect
中的文件,我可以使用docker inspect
来找出文件的位置。
但这是我的问题:我正在考虑只备份构build容器和与其相关联的卷所需的dockerfiles。 在可能的情况下,我必须从备份中恢复所有内容,如何才能知道哪个卷目录对应于哪个容器? 重build容器导致id和音量path改变,所以我需要一些额外的信息来匹配它们。 还有什么,如果有的话,我应该备份,才能真正恢复一切?
你是对的。 由于您可以拥有多个容器,因此您需要跟踪哪个容器对应于哪个容器。 如何做到这一点取决于你的设置:我使用数据容器的名称数据,所以很明显图像属于哪个容器。 这样可以像这样备份:
VOLUME=`docker inspect $NAME-data | jq '.[0].Volumes["/path/in/container"]'` tar -C $VOLUME . -czvf $NAME.tar.gz
现在你只需要重build你的图像并重新创build你的数据容器:
cat $NAME.tar.gz | docker run -name $NAME-data -v /path/in/container \ -i busybox tar -C /path/int/container -xzf -
所以这意味着你需要备份:
更新:在此期间,我创build了一个备份容器及其容量(容器)的工具: https : //github.com/discordianfish/docker-backup和备份映像,可以创build备份并将其推送到s3: https : //github.com/discordianfish/docker-lloyd
在较新的Docker中(在1.9.1, build 9894698
testing1.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