导出器概述

导出器将构建结果保存为指定的输出类型。您可以指定 exporter 与 --output CLI 选项一起使用。 Buildx 支持以下导出器:

  • image:将构建结果导出到容器镜像中。
  • registry:将构建结果导出到容器镜像中,并将其推送到 指定的注册表。
  • local:将构建根文件系统导出到本地目录。
  • tar:将构建根文件系统打包到本地 tarball 中。
  • oci:将构建结果以 OCI 镜像布局格式导出到本地文件系统。
  • docker:将构建结果以 Docker Image Specification v1.2.0 格式导出到本地文件系统。
  • cacheonly:不导出构建输出,但运行构建并创建一个 缓存。

使用导出器

要指定导出器,请使用以下命令语法:

$ docker buildx build --tag <registry>/<image> \
  --output type=<TYPE> .

大多数常见使用案例不需要您指定要使用的导出器 明确地。如果您打算自定义,则只需指定导出器 输出,或者如果要将其保存到磁盘。和 选项允许 Buildx 推断要使用的导出器设置。--load--push

例如,如果将选项与 、 Buildx 结合使用 自动使用 Exporter,并配置 Exporter 推送 结果复制到指定的注册表中。--push--tagimage

为了获得 BuildKit 提供的各种导出器的全部灵活性, 您可以使用允许您配置导出器选项的标志。--output

使用案例

每种导出器类型都针对不同的使用案例而设计。以下部分 描述一些常见场景,以及如何使用导出器生成 output 的 Output。

加载到镜像存储

Buildx 通常用于构建可以加载到镜像中的容器镜像 商店。这就是 exporter 的用武之地。以下示例显示了 如何使用导出器构建镜像,并将该镜像加载到 本地镜像存储,使用选项:dockerdocker--output

$ docker buildx build \
  --output type=docker,name=<registry>/<image> .

Buildx CLI 将自动使用导出器并将其加载到镜像中 store (如果您提供 and 选项):docker--tag--load

$ docker buildx build --tag <registry>/<image> --load .

使用驱动程序构建镜像会自动加载到本地 image store 中。docker

加载到镜像存储的镜像可立即使用 构建完成后,您将在运行 命令。docker rundocker images

推送到注册表

要将构建的镜像推送到容器注册表,您可以使用 or 导出器。registryimage

当你将选项传递给 Buildx CLI 时,你指示 BuildKit 将构建的镜像推送到指定的注册表中:--push

$ docker buildx build --tag <registry>/<image> --push .

在后台,这将使用导出器并设置参数。 这与使用以下使用选项的长格式命令相同:imagepush--output

$ docker buildx build \
  --output type=image,name=<registry>/<image>,push=true .

您还可以使用 exporter,它执行相同的操作:registry

$ docker buildx build \
  --output type=registry,name=<registry>/<image> .

将镜像布局导出到文件

您可以使用 或 exporters 将构建结果保存到 image 布局。这两个导出器都会生成一个 tar archive 文件。参数 定义 tarball 的目标输出路径。ocidockerdest

$ docker buildx build --output type=oci,dest=./image.tar .
[+] Building 0.8s (7/7) FINISHED
 ...
 => exporting to oci image format                                                                     0.0s
 => exporting layers                                                                                  0.0s
 => exporting manifest sha256:c1ef01a0a0ef94a7064d5cbce408075730410060e253ff8525d1e5f7e27bc900        0.0s
 => exporting config sha256:eadab326c1866dd247efb52cb715ba742bd0f05b6a205439f107cf91b3abc853          0.0s
 => sending tarball                                                                                   0.0s
$ mkdir -p out && tar -C out -xf ./image.tar
$ tree out
out
├── blobs
│   └── sha256
│       ├── 9b18e9b68314027565b90ff6189d65942c0f7986da80df008b8431276885218e
│       ├── c78795f3c329dbbbfb14d0d32288dea25c3cd12f31bd0213be694332a70c7f13
│       ├── d1cf38078fa218d15715e2afcf71588ee482352d697532cf316626164699a0e2
│       ├── e84fa1df52d2abdfac52165755d5d1c7621d74eda8e12881f6b0d38a36e01775
│       └── fe9e23793a27fe30374308988283d40047628c73f91f577432a0d05ab0160de7
├── index.json
├── manifest.json
└── oci-layout

导出文件系统

如果您不想从构建结果构建镜像,而是导出 构建的文件系统,您可以使用 AND 导出器。localtar

导出器将文件系统解压缩到 指定位置。导出器将创建一个 tarball 存档文件。localtar

$ docker buildx build --output type=local,dest=<path/to/output> .

导出器在多阶段构建中非常有用,因为它只允许您导出最少数量的构建工件,例如 自包含的二进制文件。local

仅缓存导出

如果您只想运行构建,则可以使用导出器,而无需 导出任何输出。例如,如果您想运行测试 建。或者,如果您想先运行构建,然后使用 后续命令。导出器会创建一个构建缓存,因此任何 连续构建是即时的。cacheonlycacheonly

$ docker buildx build --output type=cacheonly

如果你没有指定导出器,也没有提供像自动选择合适的导出器这样的简写选项,Buildx 默认为 使用导出器。除非您使用驱动程序 在这种情况下,请使用 exporter。--loadcacheonlydockerdocker

Buildx 在默认使用时会记录一条警告消息:cacheonly

$ docker buildx build .
WARNING: No output specified with docker-container driver.
         Build result will only remain in the build cache.
         To push result image into registry use --push or
         to load image into docker use --load

多个导出器

在 Buildx 版本中引入 0.13.0

您可以通过多次指定标志来为任何给定构建使用多个导出器。这需要 Buildx 和 BuildKit 版本 0.13.0 或之后。--output

以下示例使用三个 不同的导出器:

  • 用于将镜像推送到注册表的导出器registry
  • 将构建结果提取到本地文件系统的导出器local
  • 用于将结果加载到本地镜像存储的标志(导出器的简写)。--loadimage
$ docker buildx build \
  --output type=registry,tag=<registry>/<image> \
  --output type=local,dest=<path/to/output> \
  --load .

配置选项

本节介绍导出器可用的一些配置选项。

此处描述的选项对于至少两个或多个导出器类型是通用的。 此外,不同的导出器类型也支持特定参数。 有关哪个导出器的更多信息,请参阅有关每个导出器的详细页面 配置参数适用。

此处描述的常见参数包括:

压缩

导出压缩输出时,您可以配置精确的压缩 algorithm 和 level 要使用的 level 来使用。虽然默认值提供了良好的 开箱即用,您可能希望调整参数以进行优化 存储与计算成本。更改压缩参数可以减少存储空间 所需空间,并缩短镜像下载时间,但会增加构建时间。

要选择压缩算法,您可以使用该选项。为 示例,要构建 with :compressionimagecompression=zstd

$ docker buildx build \
  --output type=image,name=<registry>/<image>,push=true,compression=zstd .

在参数旁边使用 option 为支持它的算法选择压缩级别:compression-level=<value>compression

  • 0-9 表示 和gzipestargz
  • 0-22 代表zstd

作为一般规则,数字越大,生成的文件越小 be,并且压缩运行所需的时间就越长。

使用选项强制重新压缩导入的图层 从上一个镜像中,如果请求的压缩算法不同于 之前的压缩算法。force-compression=true

注意

和 压缩方法使用 compress/gzip, while 使用 github.com/klauspost/compress/zstdgzipestargzzstd

OCI 媒体类型

、 和 导出器 创建容器镜像。 这些导出程序支持 Docker 媒体类型(默认)和 OCI 媒体类型imageregistryocidocker

要导出设置了 OCI 媒体类型的镜像,请使用该属性。oci-mediatypes

$ docker buildx build \
  --output type=image,name=<registry>/<image>,push=true,oci-mediatypes=true .

下一步

阅读每个导出器的信息,了解它们的工作原理和如何使用 他们: