官方 docker 文档建议一个很好的做法是按原样备份整个 docker 卷。
当您需要备份、恢复或将数据从一个 Docker 主机迁移到另一个 Docker 主机时,卷是更好的选择。您可以停止使用该卷的容器,然后备份该卷的目录(例如 /var/lib/docker/volumes/)。
同时文档状态在任何情况下都不应修改卷。手动将卷恢复到卷中违反了该警告。所以这两个说法在我看来是矛盾的。/var/lib/docker/volumes/
卷存储在由 Docker 管理的主机文件系统的一部分中(Linux 上的 /var/lib/docker/volumes/)。非 Docker 进程不应修改文件系统的这一部分。
问题:
- 在不同版本的 docker 运行时之间以这种方式备份和恢复卷真的安全吗?
- 卷是否具有一些依赖于运行时版本的内部结构?或者它们只是常规文件?
- 将卷安装到某个容器并备份其数据是否更安全从容器内部?
答案1
这是一个复杂的问题,就这些问题而言,答案是“视情况而定”。与该问题相关的主要因素是文件系统驱动程序和 docker 守护进程范围内的活动量。假设在写入量较少的“普通”情况下,直接备份 /var/lib/docker 应该是相对安全的;但是,这相当于备份任何管理瞬态的正在运行的系统(例如,风险可能是未完成的写入)。
最终,在容器上下文中运行的进程仍然是常规进程......因此,它取决于所包含的应用程序、磁盘写入的频率和文件系统驱动程序本身。
从操作角度来看,在备份之前停止容器或其中的主要写入器进程是明智的。