我已经使用Docker几个月了,而且我还没有经常使用docker history
命令。
然而,我曾经使用它的少数几次使我产生了一个假设,即存在大量依赖的图像'与我的顶级'相关联图片,而非图层。
现在我已经明白,上面的大部分假设是基于这样一个事实,即很久以前,当我发出docker history
命令时,最左边一列的标题是 IMAGE ,实际上,这些行确实列出了与单个图像相关联的图层,而不是图像。
Docker中的图像和图层之间存在严重差异,这就是为什么这真的是一个严肃的问题。
我坦率地对此问题感到非常惊讶。 Docker会怎样剥夺这种至关重要的东西?
我刚刚花了一些时间来讨论或回答这个问题。令人惊讶的是,即使Docker 'history' command documentation也没有提到这一点。唯一真实的确认'我见过来自this link。
有人可以告诉我为什么docker history
的列标题是' IMAGE',而条目本身就是图层?
答案 0 :(得分:9)
这很复杂;)This post by Nigel Brown super 对理解这一点很有用,但我会在这里提出相关要点。
历史上(前Docker v1.10),每次由于提交操作而创建新图层时,Docker还会创建一个相应的图像,该图像由随机生成的256位UUID标识,通常称为图像ID(在UI中显示为短12位十六进制字符串或长64位十六进制字符串)。
所以,从历史上看,他们是图像,只是那些没有“人性化”的图像。标签(虽然它们可以被标记)。
自Docker v1.10以来,图像和图层通常不再是同义词。相反,图像直接引用一个或多个最终贡献于派生容器的文件系统的层。
如果您在拉出的图片上执行docker history
,您会看到类似的内容(摘自文章):
$ docker history swarm
IMAGE CREATED CREATED BY
SIZE COMMENT
c54bba046158 9 days ago /bin/sh -c #(nop) CMD ["--help"] 0 B
<missing> 9 days ago /bin/sh -c #(nop) ENTRYPOINT &{["/swarm"]} 0 B
<missing> 9 days ago /bin/sh -c #(nop) VOLUME [/.swarm] 0 B
<missing> 9 days ago /bin/sh -c #(nop) EXPOSE 2375/tcp 0 B
<missing> 9 days ago /bin/sh -c #(nop) ENV SWARM_HOST=:2375 0 B
<missing> 9 days ago /bin/sh -c #(nop) COPY dir:b76b2255a3b423981a 0 B
<missing> 9 days ago /bin/sh -c #(nop) COPY file:5acf949e76228329d 277.2 kB
<missing> 9 days ago /bin/sh -c #(nop) COPY file:a2157cec2320f541a 19.06 MB
您会看到IMAGE
列报告<missing>
,这些报告不是图片,而是作为图片组成部分的图层。
所以他们不是图像!到底是什么,为什么这个专栏命名为? (回到你原来的问题)。好吧,除了......:
但是,如果在本地Docker主机上构建映像期间提交了一个层,那么中间层将会提交一个层。图像是同时创建的。与所有其他图像一样,它具有配置项,该配置项是要作为图像的一部分合并的层摘要的列表,并且其ID或摘要包含配置对象的散列。中间图像没有用名称标记,但是,他们确实有一个“父母”。 key,包含父图像的ID。
实际上,当你在本地构建 时,那些构成层是图像(就像以前一样,即使你从其他地方拉出它们,直到v1。 10),用于促进构建缓存(如果您已经构建了该层,则构建快速构建的部分)。
所以答案是......有时它们是图像(技术上),有时它们是图层(然后在该列中表示为<missing>
)。我猜它是IMAGE
a)历史原因和b)因为它们实际上是出现在那里的图像时的图像,否则它只显示<missing>
。我可以看到它们可能有点令人困惑,当然可能还有其他技术细节,但我希望它有所帮助!
免责声明:我为Docker工作,但我的观点/帖子是我自己的等等......
答案 1 :(得分:3)
正如约翰所提到的那样,那些实际上是图像id,是由你的本地构建产生的。如果你检查每个连续的图像id,那么这些图层会被埋得更深一点,你可以看到它们的构建。这是我在本地建立的图像:
$ docker history bmitch3020/terraform-ansible
IMAGE CREATED CREATED BY SIZE COMMENT
c68a76df6362 2 months ago /bin/sh -c #(nop) ENTRYPOINT ["terraform"] 0B
32b9c2451d45 2 months ago /bin/sh -c #(nop) COPY file:a8a964b6da98146c… 62.7MB
13543af79664 2 months ago |1 ANSIBLE_KEY_ID=93C4A3FD7BB9C367 /bin/sh -… 80.8MB
e5c0db134950 2 months ago /bin/sh -c #(nop) ARG ANSIBLE_KEY_ID=93C4A3… 0B
e5153922f57d 2 months ago /bin/sh -c apt-get update && DEBIAN_FRONTEN… 85.9MB
874e27b628fd 5 months ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 5 months ago /bin/sh -c #(nop) ADD file:a71e077a42995a68f… 100MB
现在让我们浏览每个图片以查看图层(这只是docker inspect
上的一个循环来查看“RootFS - &gt;图层”部分):
$ docker history bmitch3020/terraform-ansible -q \
| while read image_id; do \
echo "$image_id"; \
if [ "$image_id" != "<missing>" ]; then \
docker inspect "$image_id" --format '{{json .RootFS.Layers}}' | jq .; \
fi; \
done
c68a76df6362
[
"sha256:a75caa09eb1f7d732568c5d54de42819973958589702d415202469a550ffd0ea",
"sha256:092445cb4dbd94421917ec3db5b8d0ee2feac691d0555e24f1b7e3451b2f9caa",
"sha256:4d221bea3442fd038aa42722b44c6633ddbd02e8d4eda1af0c84e5ef7deffe5f",
"sha256:bd39a8a25e0f87ef27495bd23f57f651b972139c11fd05c8cd7ca79e67549ad2"
]
32b9c2451d45
[
"sha256:a75caa09eb1f7d732568c5d54de42819973958589702d415202469a550ffd0ea",
"sha256:092445cb4dbd94421917ec3db5b8d0ee2feac691d0555e24f1b7e3451b2f9caa",
"sha256:4d221bea3442fd038aa42722b44c6633ddbd02e8d4eda1af0c84e5ef7deffe5f",
"sha256:bd39a8a25e0f87ef27495bd23f57f651b972139c11fd05c8cd7ca79e67549ad2"
]
13543af79664
[
"sha256:a75caa09eb1f7d732568c5d54de42819973958589702d415202469a550ffd0ea",
"sha256:092445cb4dbd94421917ec3db5b8d0ee2feac691d0555e24f1b7e3451b2f9caa",
"sha256:4d221bea3442fd038aa42722b44c6633ddbd02e8d4eda1af0c84e5ef7deffe5f"
]
e5c0db134950
[
"sha256:a75caa09eb1f7d732568c5d54de42819973958589702d415202469a550ffd0ea",
"sha256:092445cb4dbd94421917ec3db5b8d0ee2feac691d0555e24f1b7e3451b2f9caa"
]
e5153922f57d
[
"sha256:a75caa09eb1f7d732568c5d54de42819973958589702d415202469a550ffd0ea",
"sha256:092445cb4dbd94421917ec3db5b8d0ee2feac691d0555e24f1b7e3451b2f9caa"
]
874e27b628fd
[
"sha256:a75caa09eb1f7d732568c5d54de42819973958589702d415202469a550ffd0ea"
]
<missing>
您可以从上面的检查输出中看到一些内容,从下到上:
COPY
添加了一个图层,并通过缓存中添加的文件的哈希进行跟踪。