为什么docker层ID现在隐藏在新的存储模型中?
Docker 1.10引入了一个新的。因此,现在将层ID创建为其内容的哈希。这样,应该重用具有相同内容的层 这听起来不错,但为什么这个身份证现在对我们隐瞒了?我做了一些简单的测试,以确定层是否真的被重用。例如,我尝试从同一个源代码中使用不同的标记进行一些自动构建 我最终还是得到了不同的图像ID。如果我查看为什么docker层ID现在隐藏在新的存储模型中?,docker,Docker,Docker 1.10引入了一个新的。因此,现在将层ID创建为其内容的哈希。这样,应该重用具有相同内容的层 这听起来不错,但为什么这个身份证现在对我们隐瞒了?我做了一些简单的测试,以确定层是否真的被重用。例如,我尝试从同一个源代码中使用不同的标记进行一些自动构建 我最终还是得到了不同的图像ID。如果我查看docker history我只得到图像ID的: IMAGE CREATED CREATED BY
docker history
我只得到图像ID的
:
IMAGE CREATED CREATED BY SIZE COMMENT
7b007b10103a 15 minutes ago /bin/sh -c #(nop) COPY file:4c2cb4c2780edc6e2 37.77 kB
<missing> 15 minutes ago /bin/sh -c #(nop) COPY file:ac11867f64e4fdd4e 856 B
<missing> 15 minutes ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:/u 0 B
<missing> 15 minutes ago /bin/sh -c #(nop) MAINTAINER haertl.mike@gmai 0 B
由大小注释创建的图像
7b007b10103a 15分钟前/bin/sh-c#(nop)复制文件:4c2cb4c2780edc6e2 37.77 kB
15分钟前/bin/sh-c#(nop)复制文件:ac11867f64e4fdd4e 856 B
15分钟前/bin/sh-c#(nop)ENV PATH=/usr/local/sbin:/u 0 B
15分钟前/bin/sh-c#(nop)维修员海特尔。mike@gmai0 B
为什么这些信息现在被隐藏了?为什么具有相同内容的图像仍然具有不同的图像ID
编辑:docker文档中甚至有关于此的注释。但这并不能解释为何做出这一决定。依我看,这会使docker图像失去很多透明度,使其更难分析/调试
从他们的:
注意:在Docker 1.10引入的内容寻址存储模型下,图像历史数据不再存储在每个图像层的配置文件中。它现在以文本字符串的形式存储在与整个图像相关的单个配置文件中。这可能导致某些图像层在docker history命令的输出中显示为“缺失”。这是正常行为,可以忽略
您可能会听到这样的图像称为平面图像
我只能推测,因为我有一段时间没有关注这个项目,但是COPY/ENV/maintener是“假”层,不需要完整的blow ID。对于步骤,它是显示的,但我认为在引擎盖下,它是一个单层。你能用一些
运行apt get..
构建几个容器并发布结果历史记录吗。这可能会证实@creack的说法。@creack不,这不是问题所在。他们甚至在文件中提到了这一点。我已经更新了这个问题。我希望这篇文章能回答你所有的问题@RafaelSeidalinov。这是一个很好的总结,谢谢。它还同意,IMAGE
列现在相当“误导人,而且有点不幸”。我猜,我们必须接受它。