拉动现有Docker镜像时,您如何知道自己获得了什么?

时间:2017-06-23 00:00:41

标签: docker dockerfile

当您创建自己的泊坞窗图像时,通常会使用FROM启动Docker文件,并将图像基于docker hub上已存在的图像。我怎样才能更多地了解我所引用的图像中的实际内容?

例如,我有兴趣从这张图片开始: https://hub.docker.com/_/swift/

除了该网页上的说明字段中列出的内容之外,我该如何验证实际安装的内容?有没有办法在docker hub上查看现有映像的Dockerfile?

由于

1 个答案:

答案 0 :(得分:2)

Dockerfile链接

许多图片,尤其是“官方”图片,都将包含Dockerfile链接。您可以在Docker Hub的说明中找到它们。例如,现在您在问题中发布的链接中,您会找到一些图像标记和几个指向Dockerfile的链接。

3.1.0, 3.1, 3, latest (Dockerfile)

只需点击“Dockerfile”,它就会转到用于构建该版本图像的Dockerfile。

应该注意,这是与Docker Hub帐户关联的元数据。你不能完全相信它是正确的,因为它只是一个链接。 (对于GitHub,在这种情况下,它可以在任何地方。)

既然你不能完全相信它,你可能也想看......

Docker历史记录

如果您docker pull swift要获取图像,则可以使用docker history命令仔细查看它。目前,看起来像这样:

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
d505ae70cb39        2 weeks ago         /bin/sh -c swift --version                      0B
<missing>           2 weeks ago         /bin/sh -c SWIFT_URL=https://swift.org/bui...   403MB
<missing>           2 weeks ago         /bin/sh -c #(nop)  ENV SWIFT_PLATFORM=ubun...   0B
<missing>           2 weeks ago         /bin/sh -c #(nop)  ARG SWIFT_VERSION=swift...   0B
<missing>           2 weeks ago         /bin/sh -c #(nop)  ARG SWIFT_BRANCH=swift-...   0B
<missing>           2 weeks ago         /bin/sh -c #(nop)  ARG SWIFT_PLATFORM=ubun...   0B
<missing>           2 weeks ago         /bin/sh -c apt-get -q update &&     apt-ge...   626MB
<missing>           2 weeks ago         /bin/sh -c #(nop)  MAINTAINER Haris Amin <...   0B
<missing>           2 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>           2 weeks ago         /bin/sh -c mkdir -p /run/systemd && echo '...   7B
<missing>           2 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\...   2.76kB
<missing>           2 weeks ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0B
<missing>           2 weeks ago         /bin/sh -c set -xe   && echo '#!/bin/sh' >...   745B
<missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:5aff8c59a707833...   118MB

您会注意到用于构建图像每个图层的命令会被截断以供显示。这使得这个显示不是特别有用,但你可以使用--no-trunc标志来获得更详细的输出。

docker history --no-trunc swift:latest

然后你会得到很多输出(比我在这里粘贴的更多),但这是一个单项样本:

<missing> 2 weeks ago /bin/sh -c SWIFT_URL=https://swift.org/builds/$SWIFT_BRANCH/$(echo "$SWIFT_PLATFORM" | tr -d .)/$SWIFT_VERSION/$SWIFT_VERSION-$SWIFT_PLATFORM.tar.gz && curl -fSsL $SWIFT_URL -o swift.tar.gz && curl -fSsL $SWIFT_URL.sig -o swift.tar.gz.sig && export GNUPGHOME="$(mktemp -d)" && set -e; for key in 7463A81A4B2EEA1B551FFBCFD441C977412B37AD 1BE1E29A084CB305F397D62A9F597F4D21A56D5F A3BAFD3556A59079C06894BD63BC1CFE91D306C6 ; do gpg --quiet --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done && gpg --batch --verify --quiet swift.tar.gz.sig swift.tar.gz && tar -xzf swift.tar.gz --directory / --strip-components=1 && rm -r "$GNUPGHOME" swift.tar.gz.sig swift.tar.gz 403MB

大多数文本只是Dockerfile RUN语句执行的命令。您还将看到其他Dockerfile命令,如ARGCMDADDCOPY等。

由于它被编码到图像层中,因此它可能比Docker Hub自述文件中的Dockerfile链接更可靠(如果可读性更低)。