简介
在本实验中,你将学习如何使用 docker buildx imagetools inspect
命令来检查 Docker 镜像的详细信息。我们将涵盖单平台和多平台镜像的检查方法,展示如何查看它们的配置、分层结构和元数据。
你还将学习如何使用 Go 模板格式化检查输出以获得自定义视图,以及如何显示镜像的原始 JSON 清单(manifest)以全面理解其结构。
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
在本实验中,你将学习如何使用 docker buildx imagetools inspect
命令来检查 Docker 镜像的详细信息。我们将涵盖单平台和多平台镜像的检查方法,展示如何查看它们的配置、分层结构和元数据。
你还将学习如何使用 Go 模板格式化检查输出以获得自定义视图,以及如何显示镜像的原始 JSON 清单(manifest)以全面理解其结构。
在这一步中,你将学习如何使用 docker image inspect
命令检查单平台 Docker 镜像。该命令提供了关于镜像的详细信息,包括其配置、分层结构和元数据。
首先,让我们拉取一个简单的单平台镜像。我们将以 hello-world
镜像为例。
docker pull hello-world
你应该会看到显示镜像正在被拉取的输出。
Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
现在我们已经获取了镜像,可以开始检查它。使用 docker image inspect
命令后跟镜像名称。
docker image inspect hello-world
该命令将输出一个包含 hello-world
镜像各种细节的大型 JSON 对象。你将看到诸如镜像 ID、创建日期、架构、操作系统和配置等信息。
[
{
"Id": "sha256:...",
"RepoTags": [
"hello-world:latest"
],
"RepoDigests": [
"hello-world@sha256:..."
],
"Parent": "",
"Comment": "",
"Created": "...",
"Container": "...",
"ContainerConfig": {
...
},
"DockerVersion": "...",
"Author": "",
"Config": {
...
},
"Architecture": "amd64",
"Os": "linux",
"Size": ...,
"VirtualSize": ...,
"GraphDriver": {
...
},
"RootFS": {
...
},
"Metadata": {
...
}
}
]
即使你只检查一个镜像,输出也是一个 JSON 数组。这是因为该命令可以接受多个镜像名称作为参数。
在这一步中,你将学习如何检查多平台 Docker 镜像。多平台镜像设计用于在不同的架构和操作系统上运行。当你拉取多平台镜像时,Docker 会自动为你的系统架构选择正确的镜像。
让我们拉取一个多平台镜像。我们将使用轻量级 Linux 发行版 alpine
镜像。
docker pull alpine
你将看到与上一步类似的输出,显示镜像正在被拉取。
Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
现在,让我们使用 docker image inspect
命令检查 alpine
镜像。
docker image inspect alpine
输出同样是一个 JSON 对象。请注意 Architecture
和 Os
字段,它们反映了为你的特定环境拉取的镜像架构和操作系统信息。
[
{
"Id": "sha256:...",
"RepoTags": [
"alpine:latest"
],
"RepoDigests": [
"alpine@sha256:..."
],
"Parent": "",
"Comment": "",
"Created": "...",
"Container": "...",
"ContainerConfig": {
...
},
"DockerVersion": "...",
"Author": "",
"Config": {
...
},
"Architecture": "amd64",
"Os": "linux",
"Size": ...,
"VirtualSize": ...,
"GraphDriver": {
...
},
"RootFS": {
...
},
"Metadata": {
...
}
}
]
虽然 inspect
命令显示了为你的平台拉取的特定镜像的详细信息,但在默认视图中它不会直接显示镜像支持的所有平台信息。我们将在后续步骤中探索如何查看关于镜像清单(manifest)的更多细节。
在这一步中,你将学习如何使用 Go 模板来格式化 docker image inspect
命令的输出。这能让你从庞大的 JSON 输出中提取特定信息,并以更易读的格式展示。
docker image inspect
命令支持 --format
标志,该标志接收一个 Go 模板字符串作为参数。Go 模板允许你使用点号表示法访问 JSON 输出中的字段。
让我们再次检查 alpine
镜像,但这次我们将格式化输出,仅显示镜像 ID 和架构信息。
docker image inspect --format 'ID: {{.Id}}, Architecture: {{.Architecture}}' alpine
在这个命令中,{{.Id}}
访问 JSON 输出中的 Id
字段,{{.Architecture}}
访问 Architecture
字段。
你应该会看到类似以下的输出,显示拉取镜像的 ID 和架构:
ID: sha256:..., Architecture: amd64
你也可以访问嵌套字段。例如,要获取主对象中的操作系统信息,可以使用 {{.Os}}
。让我们尝试显示 ID、架构和操作系统信息。
docker image inspect --format 'ID: {{.Id}}, Architecture: {{.Architecture}}, OS: {{.Os}}' alpine
现在输出将包含操作系统信息:
ID: sha256:..., Architecture: amd64, OS: linux
Go 模板提供了更高级的功能,如循环和条件语句,但对于简单的字段提取,点号表示法已经足够。当你需要基于特定镜像属性编写脚本操作时,这种格式化方式非常有用。
在这一步中,你将学习如何查看 Docker 镜像的原始 JSON 清单。该清单提供了镜像的详细信息,包括镜像层信息,以及多平台镜像中针对不同架构的配置信息。
要查看原始清单,可以使用 docker manifest inspect
命令。这个命令对于理解多平台镜像特别有用。
让我们检查之前拉取的 alpine
镜像清单:
docker manifest inspect alpine
该命令会输出一个表示镜像清单的 JSON 对象。对于像 alpine
这样的多平台镜像,这个清单将是一个"清单列表"(也称为"索引")。该列表包含每个支持架构的条目,指向该架构的特定镜像清单。
你会看到类似以下的输出(具体内容可能因镜像版本和你的 Docker 环境而略有不同):
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": ...,
"digest": "sha256:...",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": ...,
"digest": "sha256:...",
"platform": {
"architecture": "arm",
"os": "linux",
"variant": "v6"
}
},
...
]
}
注意 manifests
数组。该数组中的每个对象都代表特定平台(架构和操作系统)的特定镜像。你可以看到 platform
字段标明了每个条目对应的架构和操作系统。digest
字段是该平台特定镜像清单的唯一标识符。
这个原始清单让你能更深入地了解多平台镜像的结构,并查看单个标签下可用的所有不同变体。
在本实验中,你学习了如何使用 docker image inspect
命令来检查 Docker 镜像的详细信息。你首先检查了一个单平台镜像(特别是 hello-world
镜像),并了解了该命令如何提供包含镜像 ID、架构、操作系统和配置等信息的完整 JSON 输出。
接着,你继续检查了一个多平台镜像,理解了此类镜像的输出会包含有关支持的不同平台的详细信息。最后,你探索了如何使用 Go 模板格式化输出来提取特定信息,以及如何查看原始 JSON 清单以更深入地了解镜像的结构。