备份友好的Docker卷

时间:2017-09-12 10:43:20

标签: docker backup docker-volume

我想采用整体方法备份运行多个Docker容器的多台计算机。有些可能会运行,例如,Postgres数据库。我想备份这个系统,而不必为不同类型的卷提供特定的备份命令。

可以使用自定义外部脚本发送,例如发信号到容器或运行Docker命令,但我强烈希望避免任何特定于某个图像或图像类型的内容。在Postgres的示例中,文档建议将特定于postgres的命令运行到备份数据库,这违背了我试图创建的备份解决方案的设计目标。

如果我必须对Docker镜像施加限制,这是可以的,只要从现有的Docker镜像开始并扩展它就可以相当容易地实现。

关于如何解决这个问题的任何想法?

我只想强调一点,我不是在寻找如何在Docker下备份Postgres数据库的解决方案,已经有很多答案解释如何这样做。我特意寻找一种备份任何卷的方法,而不必知道它是什么或必须为其数据运行特定命令。

(我考虑过这个问题是属于SO还是Serverfault,但我认为这是一个需要开发人员解决的问题,因此它属于这里。如果达成共识,很乐意移动它)

编辑:为了澄清,我想做类似于这个问题中解释的内容 How to deal with persistent storage (e.g. databases) in docker 但根据文档,使用接受的答案中的方法不适用于Postgres(我确定其他数据库容器)。

1 个答案:

答案 0 :(得分:2)

我怀疑是否存在自定义解决方案,整体,多机器,多容器,应用程序/容器不可知方法。从我的角度来看,首先需要进行大量的编排活动。而且我想知道你是否会使用像Kubernetes这样的东西 - 据说 - 它带有自己的备份解决方案。

对于单机,多容器设置我建议将容器的数据,配置和最终构建脚本存储在一个目录树(例如/docker/)中,并使用基于标准文件的备份程序进行备份根目录。

  • 使用docker-compose管理您的容器。这使您可以存储配置,甚至可以在文件中构建选项。我为每个服务都有一个单独的撰写文件,但是一个也可以工作。
  • 拥有每项服务的子目录。挂载绑定安装目录,即容器的卷。如果您需要更彻底地调整构建过程,您可以轻松地在其中存储脚本,源代码,Dockerfiles等。
  • 由于容器应该是短暂的,所以所有持久数据都应该在bind-mount中,因此应该在主docker目录中。