码头工人如何加载差异图像

时间:2020-08-23 13:41:15

标签: docker

我知道docker save可以将图像保存到tar并使用docker load重新加载图像。

例如:

我有一台计算机A和B。B无法连接集线器。 A是image:latest,B是image:base。

我必须将多张图片另存为一些tar文件,但是tar文件太大,无法传输。

我可以在A中的标签或图像ID之间保存差异,并在B中加载差异吗?

不保存整个图像,这有助于更小地更新补丁。

1 个答案:

答案 0 :(得分:0)

使用标准Docker工具无法实现。 docker save唯一的选择是写文件而不是标准输出的选项,它始终包含所有父层(和基本图像)。

如果唯一的问题是传输图像,请考虑使用两种方法来减小图像大小(例如,使用多阶段图像在最终图像中不包括构建时依赖性)或使用诸如 split之类的工具(1)将tar文件分成较小的部分。

我相信docker save tar文件的输出与"Export an image" API call相同。可能可以手动编辑该tar文件以删除图层,并且可能有一些工具可以执行此操作。 (不过,这并不是一条特别主流的路径;几年前,我已经对其进行了研究,但我本人并未对此进行研究,并且偶尔会看到很少见的SO答案中提到的工具。)

docker pulldocker save的标准行为中,仅创建完整的映像链,原则上无法设置Docker,因此您永远不会仅拥有映像的“上半部分”,而是而不是下面的基础层。手动编辑docker save tar文件会违反此不变性。