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