备份大型 docker 卷、绑定挂载、/var/lib/docker/volumes/ (owncloud)

Cry*_*per 5 backup owncloud docker

我在某种程度上“继承”了一个 docker 化的服务器环境,现在我必须实现一个备份概念 - 特别是对于 Owncloud 容器,它将用户文件存储在 docker 卷内。docer 文档 [1] 说“卷比绑定安装有几个优点”,因此“是首选机制”。列出的优点之一是“卷更容易备份”,文档建议使用如下命令来创建卷的 tar 备份:

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

但是,特别是对于备份(我使用 borg 备份将主机文件同步到异地存储库),我发现这种方式有几个缺点:

  • 对于每个备份,您都必须在本地复制整个数据,这需要两倍的磁盘空间和复制时间。
  • 每个备份都会创建一个新的 BLOB - 必须再次复制未更改的文件。
  • 要恢复单个 Owncloud 文件,您必须从备份中恢复整个 tar(在同步到备份之前解压将使所需的磁盘空间增加三倍)。...

我对 docker 还比较陌生,所以我可能还没有对 docker 生态系统有完整的了解。但据我目前所知,对于这种情况,我认为绑定安装是最好的解决方案。无论如何,我也没有从卷的其他优势中受益。或者我错过了什么?使用绑定安装有什么缺点吗?

直接备份 /var/lib/docker/volumes/ 怎么样?

通过搜索,我从 owncloud [2] 中找到了这篇博文,建议直接备份 /var/lib/docker/volumes/owncloud_files/_data 。对我来说,这似乎不是最干净的方式。

不过,考虑到目前的情况,我暂时想走这条路。安全吗?(当然,关于一致性所需的预防措施,例如关闭数据库容器、owncloud 维护模式等 - 我认为这里提到的解决方案以任何方式都需要这些!?)

[1] https://docs.docker.com/storage/volumes/

[2] https://owncloud.org/news/docker-series-pt-3-automatically-easily-backup-restore-dockerized-owncloud/

S19*_*19N 0

无论如何,我也没有从卷的其他优势中受益。或者我错过了什么?使用绑定安装有什么缺点吗?

我似乎明白 Docker 希望你忘记主机的存在;事实上,有时您无法访问它,因此卷是持久数据的最明显的方式。

绑定挂载是主机上的一个路径,因此您必须在 Docker之外以某种方式“管理”它(分配空间、挂载分区...)。也许您已经为此准备了一个系统,例如安装 Docker、docker-compose 并将其上传docker-compose.yml到服务器的 Ansible playbook。但是,如果您不这样做,或者您只是将其docker-compose指向远程 Docker 守护进程,那么您将只想使用该守护进程,而无需使用其他任何东西:那么您将需要大量数据。

直接备份 /var/lib/docker/volumes/ 怎么样?

我同意这不是一个好主意:那是 Docker 自己的空间,我不会碰它,就像我不会从/var/lib/postgresql正在运行的实例上复制一样。

或者我错过了什么?

borg为什么不在tar临时容器内运行呢?