构建驱动程序

构建驱动程序是配置BuildKit后端如何以及在哪里运行的设置。 驱动程序设置是可定制的,并允许对构建器进行细粒度控制。 Buildx支持以下驱动程序:

  • docker: 使用捆绑到Docker守护进程中的BuildKit库。
  • docker-container: 使用Docker创建一个专用的BuildKit容器。
  • kubernetes: 在Kubernetes集群中创建BuildKit pods。
  • remote: 直接连接到手动管理的BuildKit守护进程。

不同的驱动程序支持不同的使用场景。默认的docker驱动程序优先考虑简单性和易用性。它对高级功能(如缓存和输出格式)的支持有限,并且不可配置。其他驱动程序提供了更多的灵活性,并且更擅长处理高级场景。

下表概述了驱动程序之间的一些差异。

Featuredockerdocker-containerkubernetesremote
Automatically load image
Cache export✓*
Tarball output
Multi-arch images
BuildKit configurationManaged externally

* docker 驱动程序不支持所有缓存导出选项。 有关更多信息,请参阅 缓存存储后端

加载到本地图像存储

与使用默认的docker驱动程序不同,使用其他驱动程序构建的镜像不会自动加载到本地镜像存储中。如果您不指定输出,构建结果仅导出到构建缓存中。

要使用非默认驱动程序构建镜像并将其加载到镜像存储中,请使用带有构建命令的--load标志:

$ docker buildx build --load -t <image> --builder=container .
...
=> exporting to oci image format                                                                                                      7.7s
=> => exporting layers                                                                                                                4.9s
=> => exporting manifest sha256:4e4ca161fa338be2c303445411900ebbc5fc086153a0b846ac12996960b479d3                                      0.0s
=> => exporting config sha256:adf3eec768a14b6e183a1010cb96d91155a82fd722a1091440c88f3747f1f53f                                        0.0s
=> => sending tarball                                                                                                                 2.8s
=> importing to docker

使用此选项,构建完成后图像将在图像存储中可用:

$ docker image ls
REPOSITORY                       TAG               IMAGE ID       CREATED             SIZE
<image>                          latest            adf3eec768a1   2 minutes ago       197MB

默认加载

Introduced in Buildx version 0.14.0

你可以配置自定义构建驱动程序,使其行为类似于默认的docker驱动程序,并默认将镜像加载到本地镜像存储中。为此,在创建构建器时设置default-load驱动程序选项:

$ docker buildx create --driver-opt default-load=true

请注意,就像使用docker驱动程序一样,如果你使用--output指定了不同的输出格式,结果将不会被加载到镜像存储中,除非你也明确指定--output type=docker或使用--load标志。

下一步是什么

阅读每个驱动程序的说明: