Docker构建架构

Docker Build 实现了客户端-服务器架构,其中:

  • Buildx 是用于运行和管理构建的客户端和用户界面
  • BuildKit 是处理构建执行的服务器或构建器。
构建高层架构

从 Docker Engine 23.0 和 Docker Desktop 4.19 开始,Buildx 是默认的构建客户端。

构建x

Buildx 是一个 CLI 工具,提供用于构建的用户界面。 Buildx 是 Docker Engine 和 Docker Desktop 早期版本中使用的旧版构建客户端的直接替代品。在较新版本的 Docker Desktop 和 Docker Engine 中,调用命令时默认使用 Buildx docker build。在早期版本中,要使用 Buildx 进行构建,您可以使用该docker buildx build命令。

Buildx 不仅仅是一个更新的build命令。它还包含用于创建和管理 构建器的实用程序。

安装Buildx

Docker Buildx 默认随 Docker Desktop 一起安装。 Docker Engine 版本 23.0 及更高版本要求您从单独的包安装 Buildx。 Buildx 包含在 Docker Engine 安装说明中,请参阅 安装 Docker Engine

您还可以从源代码构建 CLI 插件,或从 GitHub 存储库获取二进制文件并手动安装。 有关更多信息,请参阅 docker/buildx 自述文件

建设者

“Builder”是一个用于描述 BuildKit 后端实例的术语。

构建器可以与 Buildx 客户端在同一系统上运行,也可以在不同的系统上远程运行。您可以将其作为单个节点或节点集群运行。 Builder节点可以是容器、虚拟机、或者物理机。

有关详细信息,请参阅构建器

构建套件

BuildKit 或buildkitd是执行构建工作负载的守护进程。

构建执行从命令的调用开始docker build。 Buildx 解释您的构建命令并向 BuildKit 后端发送构建请求。构建请求包括:

  • Dockerfile
  • 构建论点
  • 导出选项
  • 缓存选项

BuildKit 解析构建指令并执行构建步骤。在构建期间,Buildx 监视构建状态并将进度打印到终端。

如果构建需要来自客户端的资源(例如本地文件或构建机密),BuildKit 会从 Buildx 请求所需的资源。

与它所取代的旧版构建器相比,这是 BuildKit 更高效的一种方式。 BuildKit 仅在需要时请求构建所需的资源。相比之下,遗留构建器总是获取本地文件系统的副本。

BuildKit 可以从 Buildx 请求的资源示例包括:

  • 本地文件系统构建上下文
  • 建立秘密
  • SSH 套接字
  • 注册表身份验证令牌

有关 BuildKit 的更多信息,请参阅BuildKit

构建顺序示例

下图显示了涉及 Buildx 和 BuildKit 的示例构建顺序。

Buildx 和 BuildKit 序列图