Docker Commit 运行中的容器

13

使用 docker commit 命令对正在运行的容器进行提交,这是否创建了文件系统的一致快照?

我考虑采用此方法备份容器。您只需要执行 docker commit <container> <container>:<date> 并将其推送到本地注册表。

备份是增量的,因为提交只会创建一个新层。

同时,大量层是否会严重影响容器的 I/O 性能?是否有一种方法可以在以后删除中间层?

编辑

所谓的“一致性”,是指任何设计用于应对断电的应用程序都应该能够从这些快照中恢复。基本上,这意味着在启动快照之后不得更改任何文件。

与此同时,我发现 docker 现在支持多个存储驱动程序(aufs、devicemapper、btrfs)。不幸的是,关于它们之间的差异和它们支持的选项,几乎没有任何文档。


2
如果您的Docker镜像具有卷,请注意docker commit永远不会提交这些安装的卷中的文件。 - Thomasleveil
2个回答

1

我处于类似的情况。我在考虑不使用专门的数据卷容器,而是定期提交以获得某种增量备份。除了增量备份之外,团队开发方法的一个重要好处是,作为新手,您可以简单地docker pull一个包含所有所需数据的数据库映像,以便运行、调试和开发。

因此,我现在所做的是在提交之前暂停:

docker pause happy_feynman; docker commit happy_feynman odev:`date +%s`

据我所知,目前我没有任何问题。但这是一台正在开发中的机器,因此我在重负载服务器方面没有经验。

1
现在这是默认行为:--pause 标志默认为 true。 - tjanson

1

感谢您提供有关扁平化问题的提示。但是我的主要问题仍未得到回答。我编辑了问题以更好地反映我对一致性的理解。 - Florian Gutmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接