Docker Build 概述
Docker Build 采用客户端-服务器架构,其中:
- 客户端:Buildx 是用于运行和管理构建的客户端和用户界面。
- 服务器:BuildKit 是处理构建执行的服务器或构建器。
当你调用构建时,Buildx 客户端会向 BuildKit 后端发送构建请求。BuildKit 解析构建指令并执行构建步骤。构建输出会发送回客户端或上传到注册表(例如 Docker Hub)。
Buildx 和 BuildKit 随 Docker Desktop 和 Docker Engine 一起预装。当你调用 docker build 命令时,你正在使用 Buildx 来运行使用 Docker 附带的默认 BuildKit 进行的构建。
Buildx
Buildx 是你用来运行构建的 CLI 工具。docker build 命令是 Buildx 的包装器。当你调用 docker build 时,Buildx 会解释构建选项并向 BuildKit 后端发送构建请求。
Buildx 客户端不仅可以运行构建。你还可以使用 Buildx 创建和管理 BuildKit 后端,即构建器。它还支持管理注册表中的镜像以及并发运行多个构建的功能。
Docker Buildx 默认随 Docker Desktop 安装。你也可以从源代码构建 CLI 插件,或从 GitHub 仓库获取二进制文件并手动安装。有关更多信息,请参阅 GitHub 上的 Buildx README。
注意尽管
docker build在底层调用 Buildx,但此命令与规范的docker buildx build之间存在细微差异。有关详细信息,请参阅docker build和docker buildx build之间的区别。
BuildKit
BuildKit 是执行构建工作负载的守护进程。
构建执行始于调用 docker build 命令。Buildx 解释你的构建命令并向 BuildKit 后端发送构建请求。构建请求包括:
- Dockerfile
- 构建参数
- 导出选项
- 缓存选项
BuildKit 解析构建指令并执行构建步骤。在 BuildKit 执行构建时,Buildx 会监控构建状态并将进度打印到终端。
如果构建需要来自客户端的资源,例如本地文件或构建密钥,BuildKit 会向 Buildx 请求所需的资源。
与早期 Docker 版本中使用的传统构建器相比,这是 BuildKit 更高效的一个方面。BuildKit 仅在需要时才请求构建所需的资源。相比之下,传统构建器总是复制本地文件系统。
BuildKit 可以向 Buildx 请求的资源示例包括:
- 本地文件系统构建上下文
- 构建机密
- SSH 套接字
- 注册表认证令牌
有关 BuildKit 的更多信息,请参阅 BuildKit。