有没有办法判断一个Docker镜像是在本地构建的还是从远程仓库拉取的?
解释: 我们有一些大型镜像(15GB+),它们是在Docker HUB上进行自动化构建的。在开发和测试期间,通常更快地在本地构建这些镜像,但使用相同的标签,以便在构建下游镜像时可以使用它们。如果我们能够确定给定的镜像是在本地构建的还是下游构建的,那将非常有用。
有没有办法判断一个Docker镜像是在本地构建的还是从远程仓库拉取的?
解释: 我们有一些大型镜像(15GB+),它们是在Docker HUB上进行自动化构建的。在开发和测试期间,通常更快地在本地构建这些镜像,但使用相同的标签,以便在构建下游镜像时可以使用它们。如果我们能够确定给定的镜像是在本地构建的还是下游构建的,那将非常有用。
鉴于这个极简的 Dockerfile
From busybox
Run echo "My first command"
Run echo "My second command"
Run echo "My third command"
$ 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
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
$ 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 history 显示了创建镜像层所使用的所有命令。对于本地构建的镜像,每个命令都与一个中间图像相关联,以便在构建缓存中使用(因此下次在该docker主机上构建镜像时,它会使用缓存中的中间图像)。<missing>
,表示没有与此命令相关联的中间镜像,这表明它不是在此docker主机上构建的。你可能想要查看一下docker history
命令,以获取你所需要的信息。
这个命令会给出Dockerfile执行的命令,因此MAINTAINERS
标签(或更正确的LABEL maintainer
)可能会在历史记录中出现,从而为你提供有关镜像创建者的一些见解。
docker images
命令时应该有一个仓库,对吧?你可以应用过滤器来查看带有仓库的镜像。 - Oluwafemi Suledocker images
不起作用,因为我们将使用与 Docker Hub 中使用的相同标签 (org/image-name
) 构建镜像。我更新了问题以提供更多上下文。 - James Dudley