确定Docker镜像是在本地构建还是从repo中提取?

时间:2017-06-09 16:15:58

标签: docker

是否可以判断Docker镜像是在本地构建还是从远程存储库中提取?

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

2 个答案:

答案 0 :(得分:1)

鉴于这个最小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主机上构建映像时,它将使用来自缓存的中间映像)。

当移动图像(即推动和拉动)时,您只移动最终图像,因此当您查看其显示的历史<missing>时,表示没有与此命令关联的中间图像,这表示它是不是建立在这个docker主机上的。

答案 1 :(得分:0)

您可能想知道docker history是否为您提供了所需的信息。

此命令为您提供Dockerfile执行的命令,因此MAINTAINERS标记(或更正确的LABEL maintainer)可能会出现在历史记录中,以便您了解图像创建者。