备份泊坞窗卷 - 简单的tar归档是不够的?

时间:2018-05-29 09:11:42

标签: docker backup docker-volume

我在三台机器上运行几个Docker容器,组成一个Swarm集群。

一些存储持久数据的容器(如DB,Redis等)使用数据卷。 (我尽量避免使用bind-mount)

此类数据卷位于/ var / lib / docker / volumes /中,并为每个卷分配自定义名称而不是随机序列ID:

# ls /var/lib/docker/volumes/
redis-data   postgres-data   fluentd-data ...

我想每天定期备份这些卷,例如每天,以便我可以在发生机器故障时进行恢复并在以后修复。

但是,我在google中找到的每个文档都说明了使用新Linux容器和tar的方式:

https://docs.docker.com/storage/volumes/#backup-restore-or-migrate-data-volumes

$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

为什么呢?如果我只是归档/var/lib/docker/volumes/VOLUME目录并将其复制到其他机器,是否有任何问题?例如,permission,uid,gid等?

$ tar -zcvf redis.tgz /var/lib/docker/volumes/redis-data

P.S。

有一种情况是,使用tar进行备份可能会因归档期间数据的更改而导致数据不一致。例如,当DB仍在运行并且执行insertupdate时,归档DB数据目录......但我认为这个问题以同样的方式应用于这两种方法。

2 个答案:

答案 0 :(得分:3)

实际上这是一种模式:仅数据容器。

这个想法是让一些docker映像仅用于存储,而另一些仅用于应用程序。小心将数据存储在物理位置是一个陷阱。

您只需要知道您的数据已正确存储在Dockerized基础架构中即可。不在哪里并使用Docker创建数据转储。既不是cp也不是tar的命令。

编辑

当Docker卷不能完全正常运行时,仅数据容器是一个有用的模式。但是想法仍然是相同的(在这种基础架构中,您应该注意数据的存储位置)。

参见Docker Volumes,其开头为:

  

卷是持久保存数据的首选机制...

答案 1 :(得分:1)

没有问题,只要您知道后果并愿意依靠系统内部承担风险。但是,如果有一种有案可稽的方法来实现相同的操作却没有太多复杂性,那么为什么要冒这样的风险呢?

如果您是我,我将使用记录在案的方法来避免产品发展过程中的维护周期。

如果Docker决定更改安装点位置或将其提供为可配置选项,则您未记录的备份数据方法将失败。