如何使用 docker buildx history export 导出构建历史

DockerDockerBeginner
立即练习

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

简介

在本实验中,你将学习如何使用 docker buildx history export 命令来管理和导出 Docker 构建历史。我们将从构建一个简单的 Docker 镜像开始,并使用 docker history 命令查看其构建历史。

接下来,你将学习如何将特定镜像的构建历史导出到文件。最后,我们将探索如何导出指定构建器(builder)的所有构建记录,从而全面了解你的构建活动。通过本实验,你将掌握有效追踪和管理 Docker 镜像构建过程的技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ImageOperationsGroup -.-> docker/images("List Images") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/images -.-> lab-555049{{"如何使用 docker buildx history export 导出构建历史"}} docker/build -.-> lab-555049{{"如何使用 docker buildx history export 导出构建历史"}} end

构建简单镜像并查看其历史

在本步骤中,我们将学习如何构建一个简单的 Docker 镜像并查看其构建历史。构建 Docker 镜像需要创建一个 Dockerfile,这是一个包含所有用户可以通过命令行调用来组装镜像的指令的文本文件。

首先,如果当前不在 ~/project 目录,请导航至该目录:

cd ~/project

现在,让我们创建一个简单的 Dockerfile。我们将在 ~/project 目录下创建名为 Dockerfile 的文件:

nano Dockerfile

将以下内容添加到 Dockerfile 中:

FROM ubuntu:latest
RUN echo "Hello, Docker!" > /app/hello.txt
CMD ["cat", "/app/hello.txt"]

这个 Dockerfile 包含以下指令:

  • FROM ubuntu:latest:指定新镜像的基础镜像,我们使用 Docker Hub 上最新版本的 Ubuntu 镜像
  • RUN echo "Hello, Docker!" > /app/hello.txt:在镜像构建过程中执行的命令,创建 /app 目录并将文本 "Hello, Docker!" 写入该目录下的 hello.txt 文件
  • CMD ["cat", "/app/hello.txt"]:指定从此镜像启动容器时运行的默认命令,将执行 cat /app/hello.txt 命令来打印 hello.txt 文件内容

保存文件并退出 nano 编辑器(按 Ctrl + X,然后按 Y,最后按 Enter)。

现在,让我们使用 docker build 命令构建 Docker 镜像。我们将镜像标记为 my-hello-image,标签为 latest。命令末尾的 . 表示 Dockerfile 位于当前目录:

docker build -t my-hello-image:latest .

你将看到显示构建过程的输出,其中包含每个步骤的执行情况。

镜像构建完成后,可以使用 docker history 命令查看镜像的历史记录。该命令显示组成镜像的各层以及创建每层所使用的命令:

docker history my-hello-image:latest

输出将显示一个表格,包含各层的信息,如层 ID、使用的命令、创建时间和大小。这些历史记录对于理解镜像的构建过程和调试构建问题非常有用。

将构建历史导出到文件

在上一步中,我们直接在终端查看了 Docker 镜像的构建历史。本步骤将学习如何将这些构建历史导出到文件,以便后续分析或共享。

我们可以使用标准输出重定向操作符 >docker history 命令的输出重定向到文件。让我们将 my-hello-image:latest 镜像的历史记录导出到 ~/project 目录下名为 history.txt 的文件中。

确保当前位于 ~/project 目录:

cd ~/project

执行以下命令导出历史记录:

docker history my-hello-image:latest > history.txt

该命令会执行 docker history my-hello-image:latest,但不会在屏幕上显示输出,而是将输出写入 history.txt 文件。

你可以使用 cat 命令查看文件内容,验证文件是否已创建并包含构建历史:

cat history.txt

你将看到与上一步相同的构建历史信息,但现在这些信息已存储在 history.txt 文件中。该文件可以方便地用于共享或文档记录。

将构建历史导出到文件是一个实用的做法,可以记录 Docker 镜像的构建过程,这对调试、审计和团队协作都很有帮助。

导出构建器的所有构建记录

在前面的步骤中,我们构建了 Docker 镜像并导出了其历史记录。Docker 默认使用的构建器 BuildKit 会保留所有构建操作的记录。本步骤将学习如何导出所有这些构建记录。

要导出所有构建记录,我们可以使用带有 --metadata-file 标志的 docker buildx build 命令。该标志允许我们指定一个文件,构建元数据(包括构建记录)将以 JSON 格式写入该文件。

首先确保位于 ~/project 目录:

cd ~/project

现在让我们重新构建镜像,但这次我们会将构建元数据导出到名为 build-records.json 的文件中。我们将使用第一步中创建的相同 Dockerfile

docker buildx build --metadata-file build-records.json -t my-hello-image:latest .

docker buildx build 命令是 Docker Buildx 插件的一部分,该插件提供了增强的构建功能。--metadata-file build-records.json 标志告诉 BuildKit 将构建元数据写入指定文件。

构建完成后,~/project 目录下会生成一个名为 build-records.json 的文件。该文件包含 JSON 格式的详细构建过程信息。

你可以使用 cat 命令查看 build-records.json 文件内容:

cat build-records.json

输出将是一个包含各种构建细节的 JSON 对象,包括构建步骤信息、生成的镜像以及其他元数据。这些全面的记录对于高级分析、自动化以及与其他工具的集成非常有价值。

相比仅导出镜像历史记录,导出构建记录能提供更详细的构建过程视图,让你深入了解每个构建步骤的执行情况以及涉及的依赖关系。

总结

在本实验中,我们学习了如何通过创建包含构建指令的 Dockerfile 来构建一个简单的 Docker 镜像,包括指定基础镜像、在构建过程中运行命令以及定义容器的默认命令。随后我们使用 docker build 命令创建镜像并为其打上标签以便识别。

完成镜像构建后,我们探索了如何使用 docker history 命令查看镜像的历史记录,该命令能展示构建镜像时使用的各层和命令。实验还指导我们通过 docker buildx history export 将特定镜像的构建历史导出到文件,并演示了如何导出当前构建器的所有构建记录,从而保存和查看构建细节。