Docker 构建概览

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

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

当你发起构建时,Buildx 客户端会向 BuildKit 后端发送构建请求。BuildKit 解析构建指令并执行构建步骤。构建输出要么返回给客户端,要么上传到注册表,例如 Docker Hub。

Buildx 和 BuildKit 都随 Docker Desktop 和 Docker Engine 一起预装。当您调用 docker build 命令时,您正在使用 Buildx 通过随 Docker 一起捆绑的默认 BuildKit 运行构建。

构建x

Buildx 是您用来运行构建的 CLI 工具。docker build 命令是 Buildx 的封装。当您调用 docker build 时,Buildx 会解析构建选项并将构建请求发送到 BuildKit 后端。

Buildx 客户端的功能不仅限于运行构建。您还可以使用 Buildx 来创建和管理 BuildKit 后端,即所谓的构建器。它还支持管理注册表中的镜像以及并行运行多个构建的功能。

Docker Buildx 默认随 Docker Desktop 安装。您也可以从源代码构建 CLI 插件,或从 GitHub 仓库获取Binaries并手动安装。有关更多信息,请参阅 GitHub 上的 Buildx README

构建工具包

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

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

  • Dockerfile
  • 构建参数
  • 导出选项
  • 缓存选项

BuildKit 解析构建指令并执行构建步骤。当 BuildKit 执行构建时,Buildx 监控构建状态并在终端打印 进度。

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

这是与 Docker 早期版本中使用的旧构建器相比,BuildKit 更高效的一种方式。BuildKit 仅在需要时请求构建所需的资源。相比之下,旧构建器总是会复制本地文件系统。

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

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

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