你怎么知道当你拉一个现有的Docker镜像时你得到了什么?

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

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

除了该网页上的说明字段中列出的内容,我怎样才能确认实际安装的内容? 有没有办法查看docker集线器上的现有图像的Dockerfile?

谢谢

Dockerfile链接

许多图像,特别是“官方”图像,将包含Dockerfile链接。 你会在Docker Hub的描述中find它们。 例如,现在在你的问题中发布的链接,你会发现一些图片标签和几个链接到Dockerfile。

3.1.0, 3.1, 3, latest (Dockerfile) 

只需点击“Dockerfile”,它就会将您带到用于构build该版本图像的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 

您会注意到用于构build图像的每个图层的命令将被截断以供显示。 这使得这个显示不是特别有用,但是你可以使用--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自述文件中find的Dockerfile链接更可靠(如果可读性更差)。