Docker 构建概述
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自述文件。
BuildKit
BuildKit是执行构建工作负载的守护进程。
构建执行以调用docker build
命令开始。Buildx解释您的构建命令并将构建请求发送到BuildKit后端。构建请求包括
- Dockerfile
- 构建参数
- 导出选项
- 缓存选项
BuildKit解析构建指令并执行构建步骤。在BuildKit执行构建时,Buildx会监视构建状态并将进度打印到终端。
如果构建需要来自客户端的资源,例如本地文件或构建密钥,BuildKit会向Buildx请求它需要的资源。
这是BuildKit与Docker早期版本中使用的旧构建器相比效率更高的一种方式。BuildKit仅在需要时才请求构建所需的资源。相比之下,旧的构建器总是会复制本地文件系统。
BuildKit可以向Buildx请求的资源示例包括
- 本地文件系统构建上下文
- 构建密钥
- SSH套接字
- 注册表身份验证令牌
有关BuildKit的更多信息,请参阅BuildKit。