Docker卷备份和恢复

我正在使用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 - 

所以这意味着你需要备份:

  • Dockerfile
  • 容器中的容量path
  • 卷所属容器的名称

更新:在此期间,我创build了一个备份容器及其容量(容器)的工具: https : //github.com/discordianfish/docker-backup和备份映像,可以创build备份并将其推送到s3: https : //github.com/discordianfish/docker-lloyd

在较新的Docker中(在1.9.1, build 9894698testing1.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