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 socket
- 仓库身份验证令牌
有关 BuildKit 的更多信息,请参阅 BuildKit。