如何使用 docker scout quickview 命令快速了解镜像概况

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,你将学习如何使用 docker inspect 命令快速了解 Docker 镜像。你将探索如何获取特定镜像的详细信息,识别并检查最近构建的镜像,以及了解如何使用格式化选项从检查输出中提取相关数据。本实验将通过使用示例镜像和一个简单的 Dockerfile 引导你完成实际示例。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/inspect -.-> lab-555210{{"如何使用 docker scout quickview 命令快速了解镜像概况"}} docker/pull -.-> lab-555210{{"如何使用 docker scout quickview 命令快速了解镜像概况"}} docker/images -.-> lab-555210{{"如何使用 docker scout quickview 命令快速了解镜像概况"}} docker/build -.-> lab-555210{{"如何使用 docker scout quickview 命令快速了解镜像概况"}} end

快速了解特定镜像

在这一步中,你将学习如何使用 docker inspect 命令快速了解特定的 Docker 镜像。该命令可提供有关 Docker 对象(包括镜像、容器、卷和网络)的详细信息。

首先,让我们拉取一个可以检查的示例镜像。我们将使用 hello-world 镜像,这是一个用于测试的非常小的镜像。

docker pull hello-world

你应该会看到表明镜像正在被拉取和下载的输出。

现在我们已经有了这个镜像,就可以使用 docker inspect 来获取有关它的信息。

docker inspect hello-world

这个命令将输出一个大型的 JSON 对象,其中包含有关 hello-world 镜像的各种详细信息,例如其 ID、创建日期、架构、操作系统和配置。

为了快速了解情况,你可能会对这个 JSON 输出中的特定字段感兴趣。你可以在 docker inspect 中使用 -f--format 标志来指定一个 Go 模板,以格式化输出。例如,要查看镜像 ID 和创建日期,你可以使用以下命令:

docker inspect -f '{{.Id}} {{.Created}}' hello-world

这个命令将输出镜像 ID 及其创建时间戳。{{.Id}}{{.Created}} 是占位符,它们引用 docker inspect 的 JSON 输出中的 IdCreated 字段。

你可以从完整的 docker inspect hello-world 命令的 JSON 输出中探索其他字段,并在你的格式字符串中使用它们,以获取你需要的特定信息。

快速了解最近构建的镜像

在这一步中,你将学习如何识别并快速了解最近构建的 Docker 镜像。当你正在积极开发和构建镜像,并希望快速检查最新版本时,这非常有用。

首先,让我们创建一个简单的 Dockerfile 来构建一个镜像。在你的 ~/project 目录中,创建一个名为 Dockerfile 的文件,内容如下:

FROM alpine:latest
RUN echo "Hello, Docker!" > /app/message.txt
CMD cat /app/message.txt

这个 Dockerfile 使用 alpine 基础镜像,添加一个名为 message.txt 的文件,内容为 "Hello, Docker!",并设置容器运行时打印该文件内容的命令。

现在,使用 docker build 命令构建 Docker 镜像。我们将其标记为 my-recent-image

docker build -t my-recent-image .

命令末尾的 . 表示 Dockerfile 位于当前目录(~/project)。你将看到显示构建过程的输出。

构建完成后,你可以使用 docker images 列出你的镜像。

docker images

你应该会看到 my-recent-image 被列出,以及上一步中的 hello-world 镜像和 alpine 基础镜像。最近构建的镜像通常会出现在列表顶部,或者具有最近的创建时间。

要快速了解最近构建的镜像,你可以将 docker imagesheadawk 等命令行工具结合使用,以提取列表中第一个镜像的 ID(通常是最近的镜像)。然后,你可以使用该 ID 运行 docker inspect

docker inspect $(docker images -q | head -n 1)

让我们来分解这个命令:

  • docker images -q:仅列出镜像 ID。
  • head -n 1:获取输出的第一行,即最近镜像的 ID。
  • $(...):这是命令替换,它执行括号内的命令,并将其输出替换到外部命令中。
  • docker inspect ...:使用从命令替换中获得的 ID 检查镜像。

这将输出最近构建的镜像的详细 JSON 信息。你可以再次在 docker inspect 中使用 -f 标志,根据需要格式化输出,与上一步类似。

例如,要查看最近镜像的 ID 和创建日期:

docker inspect -f '{{.Id}} {{.Created}}' $(docker images -q | head -n 1)

这提供了一种快速获取你刚刚构建的镜像关键信息的方法。

从 SPDX 文件中快速了解情况

在这一步中,你将学习如何通过生成和检查 SPDX(软件包数据交换,Software Package Data Exchange)文件,快速了解 Docker 镜像中的软件组件。SPDX 是一种用于传达软件物料清单(SBOM,Software Bill of Materials)信息的开放标准,这些信息包括组件、许可证和版权等。

为 Docker 镜像生成 SPDX 文件需要一个能够分析镜像层并提取必要信息的工具。syft 就是这样一个工具,它是一个用于从容器镜像和文件系统生成 SBOM 的命令行工具。

由于 syft 没有预先安装,我们将下载并安装它。我们将下载适用于 Linux 的最新版本。

curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sudo bash -s -- -b /usr/local/bin

这个命令会下载 syft 的安装脚本,并使用 sudo 执行该脚本,将二进制文件安装到 /usr/local/bin 目录。你可能会被要求输入密码,但 labex 用户可以免密码使用 sudo

安装完成后,你可以通过检查其版本来验证 syft 是否安装成功:

syft version

你应该会看到 syft 的版本信息。

现在,让我们为上一步中构建的 my-recent-image 生成一个 SPDX 文件。我们将把结果输出到 ~/project 目录下一个名为 my-recent-image.spdx.json 的文件中。

syft my-recent-image -o spdx-json > ~/project/my-recent-image.spdx.json

这个命令指示 syft 分析 my-recent-image,并以 SPDX JSON 格式输出结果,然后将输出重定向到指定的文件。根据镜像的大小,这个过程可能需要一些时间。

命令执行完成后,你将得到一个 SPDX JSON 文件,其中包含镜像中发现的软件包的详细清单。你可以使用像 nano 这样的文本编辑器查看该文件的内容:

nano ~/project/my-recent-image.spdx.json

在文件中,你会找到关于镜像本身的信息以及检测到的软件包列表,包括它们的名称、版本和许可证。这让你无需运行容器或手动检查各个镜像层,就能快速了解镜像中存在的软件组件。

你可以滚动浏览文件,查看不同的部分及其包含的信息。查找 packages 数组,它列出了检测到的软件组件。

Ctrl + X 退出 nano

总结

在本次实验中,你学习了如何使用 docker inspect 命令快速了解 Docker 镜像。你通过拉取 hello-world 镜像并使用 docker inspect 以 JSON 格式查看其详细信息,练习了对特定镜像的检查。你还学习了如何在 docker inspect 中使用 -f 标志和 Go 模板来提取和格式化特定字段,如镜像 ID 和创建日期,从而实现自定义的快速概览。

此外,你探索了如何识别和检查最近构建的 Docker 镜像,这在积极的开发周期中特别有用。这包括了解如何列出镜像,并可能对其进行过滤或排序,以找到最新的镜像进行检查。