如何使用 docker manifest inspect 命令查看镜像清单

DockerDockerBeginner
立即练习

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

简介

在这个实验中,你将学习如何使用 docker manifest inspect 命令来查看镜像清单。我们将从拉取一个多架构的 Docker 镜像开始,具体是 alpine 镜像,以此来了解 Docker 如何处理不同架构的镜像。

拉取镜像后,你将使用 docker manifest inspect 来检查与多架构镜像关联的清单列表。然后,你将深入检查该列表中的特定镜像清单,最后探索 docker manifest inspect 命令的详细输出选项,以全面了解镜像清单的详细信息。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL 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") subgraph Lab Skills docker/inspect -.-> lab-555170{{"如何使用 docker manifest inspect 命令查看镜像清单"}} docker/pull -.-> lab-555170{{"如何使用 docker manifest inspect 命令查看镜像清单"}} end

拉取多架构镜像

在这一步中,你将学习如何拉取多架构的 Docker 镜像。多架构镜像指的是一个单一的镜像标签,可在不同架构(如 amd64arm64 等)中使用。当你拉取多架构镜像时,Docker 会自动为你系统的架构选择正确的镜像层。

我们将拉取 alpine 镜像,它是一种轻量级的 Linux 发行版,常用于 Docker 容器。alpine 镜像是一个多架构镜像。

要拉取 alpine 镜像,请打开终端并运行以下命令:

docker pull alpine

此命令会指示 Docker 从 Docker Hub 下载 alpine 镜像的最新版本。由于 alpine 是多架构镜像,Docker 会下载适合你 LabEx 虚拟机架构的镜像层。

你应该会看到类似以下的输出,表明 Docker 正在拉取镜像:

Using default tag: latest
latest: Pulling from library/alpine
... (output showing download progress)
Digest: sha256:...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Digest 行显示了为你的架构拉取的特定镜像清单的唯一标识符。

命令执行完成后,alpine 镜像将在你的 LabEx 虚拟机上可用,并可用于运行容器。

检查多架构镜像的清单列表

在上一步中,我们拉取了 alpine 镜像。由于 alpine 是多架构镜像,标签 alpine:latest 实际上指向一个 清单列表。清单列表是一个镜像清单的集合,每个清单对应一种不同的架构。当你拉取多架构镜像时,Docker 会使用清单列表为你的系统找到正确的镜像清单。

要查看 alpine:latest 镜像的清单列表,我们可以使用 docker manifest inspect 命令。该命令允许你查看镜像清单或清单列表的详细信息。

在终端中运行以下命令:

docker manifest inspect alpine:latest

此命令将输出一个 JSON 文档,该文档表示 alpine:latest 镜像的清单列表。输出将显示一个 manifests 列表,每个清单对应一种不同的架构(如 amd64arm64arm/v7 等)。列表中的每个清单都会包含诸如 platform(架构和操作系统)和 digest(特定架构的镜像清单的唯一标识符)等详细信息。

你会看到类似以下的输出(具体的摘要信息和清单数量可能会有所不同):

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 528,
         "digest": "sha256:...",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 528,
         "digest": "sha256:...",
         "platform": {
            "architecture": "arm",
            "os": "linux",
            "variant": "v6"
         }
      },
      ...
   ]
}

此输出证实了 alpine:latest 确实是一个包含各种架构清单的清单列表。这就是当你使用多架构标签时,Docker 知道为你的系统拉取哪个特定镜像的方式。

检查列表中的特定镜像清单

在上一步中,我们检查了 alpine:latest 的清单列表。该列表包含多个条目,每个条目指向不同架构的特定镜像清单。现在,让我们来检查其中一个特定的镜像清单。

要检查特定的清单,我们需要其摘要信息(digest)。从 docker manifest inspect alpine:latest 的输出中,找到与你的 LabEx 虚拟机架构(即 amd64)匹配的 digest。摘要信息看起来会像 sha256:...

一旦你获得了 amd64 清单的摘要信息,就可以使用 docker manifest inspect 命令来检查它,命令后面要跟上镜像名称和摘要信息,两者用 @ 符号分隔。

YOUR_AMD64_DIGEST 替换为你在上一步输出中找到的 amd64 平台的实际摘要信息。

docker manifest inspect alpine@YOUR_AMD64_DIGEST

例如,如果 amd64 的摘要信息是 sha256:f70734b6a266dcb51c52a820c34f3204cc6897445f6510b7a5be74d30a72f227,那么命令将是:

docker manifest inspect alpine@sha256:f70734b6a266dcb51c52a820c34f3204cc6897445f6510b7a5be74d30a72f227

此命令将输出一个 JSON 文档,该文档表示 amd64 架构的特定镜像清单。这个清单包含有关镜像层(由其摘要信息标识)和镜像配置(同样由摘要信息标识)的详细信息。

你会看到类似以下的输出:

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 1510,
    "digest": "sha256:..."
  },
  "layers": [
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 2803897,
      "digest": "sha256:..."
    }
  ]
}

此输出展示了单个镜像清单的结构,列出了构成该特定架构镜像的配置和层。

以详细输出模式检查清单

在前面的步骤中,我们检查了清单列表和特定的镜像清单。docker manifest inspect 的默认输出会提供清单或清单列表的摘要信息。若要获取更详细的信息,包括镜像的完整配置,我们可以使用 --verbose 标志。

让我们再次检查 alpine:latest 的清单列表,但这次使用 --verbose 标志。这将显示清单列表,并且对于列表中的每个清单,还会显示完整的配置细节。

在你的终端中运行以下命令:

docker manifest inspect --verbose alpine:latest

此命令将输出一个更详细的 JSON 文档。对于 manifests 列表中的每个条目,你现在会看到一个名为 Config 的额外字段。这个 Config 字段包含了特定架构镜像的完整配置,包括诸如入口点、命令、环境变量、工作目录等详细信息。

你会看到类似以下的输出(Config 部分的具体细节会有所不同):

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 528,
         "digest": "sha256:...",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         },
         "Config": {
            "Env": [
               "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Entrypoint": [
               "/bin/sh"
            ],
            "Cmd": null,
            "WorkingDir": "/",
            ...
         }
      },
      ...
   ]
}

当你需要查看清单列表中镜像的详细配置时,使用 --verbose 标志很有用,这对于调试或了解特定镜像的设置方式很有帮助。

总结

在本次实验中,我们学习了如何使用 docker manifest inspect 命令来查看镜像清单。我们首先拉取了一个多架构镜像 alpine,了解到单个标签可以代表不同架构的镜像。

然后,我们使用 docker manifest inspect 查看与多架构镜像关联的清单列表,该列表详细列出了适用于各种架构的可用镜像清单。最后,我们探索了如何检查列表中的特定镜像清单,以及如何使用详细输出选项获取更详细的信息。