如何使用 docker image history 命令检查镜像层级

DockerDockerBeginner
立即练习

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

简介

在本实验中,你将学习如何使用 docker history 命令来检查 Docker 镜像的分层结构。理解镜像层及其创建命令对于调试和优化 Docker 镜像至关重要。

你将首先查看镜像的基本历史记录,然后探索禁用输出截断的选项以获得完整的命令可见性,并使用简洁输出模式获取简明视图。此外,你还将学习如何使用 Go 模板格式化历史记录输出以实现自定义报告,以及如何显示为特定平台构建的镜像的历史记录。


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") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/inspect -.-> lab-555153{{"如何使用 docker image history 命令检查镜像层级"}} docker/pull -.-> lab-555153{{"如何使用 docker image history 命令检查镜像层级"}} docker/images -.-> lab-555153{{"如何使用 docker image history 命令检查镜像层级"}} end

查看 Docker 镜像的历史记录

在这一步中,你将学习如何查看 Docker 镜像的历史记录。镜像历史记录会显示构成镜像的各个分层以及用于创建每个分层的命令。这对于理解镜像的构建过程和调试问题非常有用。

首先,让我们拉取一个可以检查的 Docker 镜像。在这个示例中,我们将使用 ubuntu 镜像。

docker pull ubuntu

你应该会看到镜像正在被拉取的输出信息。拉取完成后,你可以使用 docker history 命令后跟镜像名称或 ID 来查看镜像的历史记录。

docker history ubuntu

docker history 命令的输出会显示一个包含多列信息的表格:

  • IMAGE:镜像分层的 ID
  • CREATED:分层创建的时间
  • CREATED BY:用于创建该分层的命令
  • SIZE:分层的大小
  • COMMENT:与该分层关联的注释

通过这个历史记录,你可以追溯构建 ubuntu 镜像的步骤,查看每个执行的命令及其生成的分层。

查看未截断的历史记录输出

在上一步中,你查看了 ubuntu 镜像的历史记录。你可能注意到部分输出内容(特别是 CREATED BY 列中的命令)被截断了。这是 docker history 命令的默认行为,目的是保持输出简洁。

要查看完整的未截断输出,可以在 docker history 命令中使用 --no-trunc 标志。

让我们用 ubuntu 镜像来尝试这个操作:

docker history --no-trunc ubuntu

现在,你应该能看到用于构建 ubuntu 镜像每个分层的完整命令。这对于需要查看分层构建的精确细节特别有帮助,尤其是那些包含长构建命令的复杂镜像。

将本命令的输出与上一步的输出进行对比,观察 CREATED BY 列中的差异。

查看简洁模式的历史记录输出

在前面的步骤中,你看到了 ubuntu 镜像的详细历史记录,包括构建每个分层所使用的命令。有时,你可能只对分层的镜像 ID 感兴趣,而不需要其他信息。

要查看仅显示镜像 ID 的简洁输出,可以在 docker history 命令中使用 -q--quiet 标志。

让我们以简洁模式查看 ubuntu 镜像的历史记录:

docker history -q ubuntu

现在输出将仅显示各分层的镜像 ID,每行一个。当你需要快速获取分层 ID 列表用于脚本编写或其他用途时,这个功能会很有帮助。

将此输出与之前的输出进行对比,观察 -q 标志如何简化显示的信息。

使用 Go 模板格式化历史记录输出

除了默认和简洁输出格式外,docker history 还允许你使用 Go 模板来格式化输出。这让你能够精细控制显示哪些信息以及如何呈现这些信息。

--format 标志用于指定 Go 模板。你可以通过模板语法访问镜像历史记录的各种字段。一些常用字段包括 .ID.Created.CreatedBy.Size.Comment

让我们尝试格式化输出,仅显示镜像 ID 和创建分层所用的命令,并用制表符分隔:

docker history --format "{{.ID}}\t{{.CreatedBy}}" ubuntu

在这个模板中:

  • {{.ID}} 表示分层的镜像 ID
  • \t 是用于分隔的制表符
  • {{.CreatedBy}} 表示创建分层所用的命令

你可以尝试不同的字段和格式来获得所需输出。例如,要包含大小信息:

docker history --format "{{.ID}}\t{{.Size}}\t{{.CreatedBy}}" ubuntu

使用 Go 模板为脚本编写或报告目的提供了从镜像历史记录中提取特定信息的强大方式。

查看特定平台的历史记录

Docker 镜像可以针对不同的架构和操作系统构建。当一个镜像支持多平台时,你可能需要查看特定平台的历史记录。

docker history 命令允许你使用 --platform 标志指定目标平台。平台格式通常为 操作系统/架构,例如 linux/amd64linux/arm64

让我们查看 ubuntu 镜像在 linux/amd64 平台上的历史记录:

docker history --platform linux/amd64 ubuntu

该命令将显示针对 linux/amd64 架构构建的 ubuntu 镜像历史记录。如果镜像不支持指定平台,你可能会看到错误信息或不同的历史记录,具体取决于镜像的构建方式。

当处理多架构镜像并需要检查特定目标环境的构建过程时,这个功能特别有用。

总结

在本实验中,你学习了如何使用 docker history 命令来检查 Docker 镜像的各个层级。你首先拉取了 ubuntu 镜像,然后查看了它的历史记录,其中显示了每个层级的信息,包括镜像 ID、创建时间、创建时使用的命令以及大小。这为你提供了镜像构建过程的清晰视图。

接着,你探索了修改 docker history 输出的各种选项。你学会了使用 --no-trunc 标志来禁用输出截断,从而查看构建每个层级时使用的完整命令。这对于理解镜像创建的确切步骤至关重要。本实验还涵盖了使用 -q 标志以简洁模式查看历史记录(仅显示镜像 ID)、使用 Go 模板格式化输出以获得自定义视图,以及使用 --platform 标志查看特定平台的历史记录。