如何在 docker 中拍摄容器快照

Posted

技术标签:

【中文标题】如何在 docker 中拍摄容器快照【英文标题】:How to take container snapshots in docker 【发布时间】:2014-04-18 04:42:51 【问题描述】:

我们如何获取容器快照并将快照加载到另一个 docker 主机中。我想知道容器快照而不是图像。我对 docker 中的导出/导入和保存/加载命令感到困惑。我喜欢更清晰或更深入地理解它们。

拥有运行容器和屋顶的元数据的快照。另一个 docker 主机中的确切状态。在这个方向上的帮助会很棒。

【问题讨论】:

【参考方案1】:

command docker commit 为您的容器拍摄快照。该快照是一个图像,您可以将其放在(私有)存储库中,以便能够将其拉到另一台主机上。

不使用图像的选项(您说要避免)确实是save 和load。根据文档,这会将您的容器与所有文件层一起保存。因此,如果您有一个带有子容器的设置,例如 Ubuntu > JavaJDK > Elasticsearch > my-container,所有4个文件层将进入那里。但是您可能已经将前 3 层作为图像显示在另一台主机上,在这种情况下,save 会产生很多开销。然后,您可以使用export 和import,根据文档仅导出顶层文件层(换句话说,容器,而不是它下面的图像)。

有关图像、容器、文件层等的更多信息可以在official documentation 中找到(例如file system。

【讨论】:

如果我使用导出然后导入问题是我不能创建一个可以使用导入的数据运行的容器吗?如果可以的话,我可以使用 import 创建一个容器吗? docker 的完整文档位于docs.docker.com@qkrijger 词汇表链接是文件系统层【参考方案2】:

如果您正在寻找“精确状态”,包括执行状态,您可能需要使用 CRIU(检查点)。

给定一台linux主机,Docker可以使用CRIU来保存容器的执行状态。 CRIU 仍处于“实验性”状态,您可以通过运行查看所有可能的命令(启用实验模式后):

docker checkpoint

您可以使用--save-dir 选项将检查点放在您选择的目录中。

然后你可以使用

docker start --checkpoint (checkpoint name) --checkpoint-dir (checkpoint directory)

恢复检查点。

如果移动服务器,您可能需要随身携带图像。

您可以阅读以下文档的更多信息: https://docs.docker.com/engine/reference/commandline/checkpoint/

【讨论】:

以上是关于如何在 docker 中拍摄容器快照的主要内容,如果未能解决你的问题,请参考以下文章

Vmware虚拟机怎么拍摄快照/vmware如何新建快照

Qt+GStreamer:如何在播放实时视频流时拍摄快照

JavaFX:如果节点边界设置为最大值,如何拍摄节点快照?

当android应用程序后台运行时如何在android中隐藏视图(在后台运行时不停止android拍摄快照)[重复]

Docker—— 镜像原理容器快照commit

如何告诉 debezuim Mysql 源连接器停止重新拍摄 kafka 主题中现有表的快照?