确定是否build立本地或从回购拉的docker图像?

是否有可能判断一个Docker镜像是在本地构build还是从远程存储库中提取?

澄清:我们有大型图像(15+ GB),这些图像是Docker HUB中自动构build的。 在开发/testing过程中,在本地构build这些图像通常会更快,但是使用相同的标签,以便可以用于构build下游图像。 如果我们能够确定给定的图像是在本地还是在下游build立,那将是有用的。

给这个最小的Dockerfile

 From busybox Run echo "My first command" Run echo "My second command" Run echo "My third command" 

你可以用下面的代码创build一个docker镜像:

 $ docker build -t abdelghany/myimage . $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE abdelghany/myimage latest 159379ab5770 5 minutes ago 1.106 MB busybox latest c75bebcdd211 3 weeks ago 1.106 MB 

这是本地build造的图像的docker history

 $ docker history abdelghany/myimage IMAGE CREATED CREATED BY SIZE COMMENT 7a352943082a 8 seconds ago /bin/sh -c echo "My third command" 0 B 6e59deae3839 8 seconds ago /bin/sh -c echo "My second command" 0 B 24df2c17994f 9 seconds ago /bin/sh -c echo "My first command" 0 B c75bebcdd211 3 weeks ago /bin/sh -c #(nop) CMD ["sh"] 0 B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:5dde1d6e0f6362350d 1.106 MB 

现在,将图像推送到registry中,在本地删除它,然后再次将其拉出。

 $ docker push abdelghany/myimage $ docker rmi abdelghany/myimage $ docker pull abdelghany/myimage 

这里是拉图像的docker history

 $ docker history abdelghany/myimage IMAGE CREATED CREATED BY SIZE COMMENT 159379ab5770 3 minutes ago /bin/sh -c echo "My third command" 0 B <missing> 3 minutes ago /bin/sh -c echo "My second command" 0 B <missing> 3 minutes ago /bin/sh -c echo "My first command" 0 B <missing> 3 weeks ago /bin/sh -c #(nop) CMD ["sh"] 0 B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:5dde1d6e0f6362350d 1.106 MB 

说明: docker历史logging显示用于创build图像图层的所有命令。 对于本地构build的图像,每个命令都与在构buildcaching中使用的中间图像相关联(所以下一次在该泊坞窗主机上构build图像时,它将使用来自caching的中间图像)。

当四处移动图像(即推拉)时,只会移动最终图像,因此当您查看显示<missing>的历史logging时,表示没有与此命令相关联的中间图像,这表明它不是build立在此泊坞窗上主办。

你可能想看看docker history给你你正在寻找的信息。

这个命令给你Dockerfile执行的命令,所以MAINTAINERS标记(或者更正确的LABEL maintainer )可能会出现在历史logging中,让你对图像创build者有所了解。