出口商概览
导出器将构建结果保存为指定的输出类型。您指定要与--output
CLI 选项一起使用的导出器
。 Buildx 支持以下导出器:
image
:将构建结果导出到容器镜像。registry
:将构建结果导出到容器镜像中,并推送到指定的registry。local
:将构建根文件系统导出到本地目录。tar
:将构建根文件系统打包到本地 tarball 中。oci
:将构建结果以 OCI 图像布局 格式导出到本地文件系统。docker
:将构建结果以 Docker镜像规范v1.2.0 格式导出到本地文件系统。cacheonly
:不导出构建输出,但运行构建并创建缓存。
使用出口商
要指定导出器,请使用以下命令语法:
$ docker buildx build --tag <registry>/<image> \
--output type=<TYPE> .
大多数常见用例不需要您显式指定要使用的导出器。仅当您打算自定义输出或要将其保存到磁盘时,才需要指定导出器。--load
和选项--push
允许 Buildx 推断要使用的导出器设置。
例如,如果--push
与 结合使用该选项--tag
,Buildx 会自动使用image
导出器,并配置导出器将结果推送到指定的注册表。
为了充分利用 BuildKit 提供的各种导出器的灵活性,您可以使用--output
允许您配置导出器选项的标志。
用例
每种导出器类型都是针对不同的用例而设计的。以下部分描述了一些常见场景,以及如何使用导出器生成所需的输出。
加载到图像存储
Buildx 通常用于构建可加载到映像存储的容器映像。这就是docker
导出器的用武之地。以下示例展示了如何使用导出器构建图像docker
,并使用以下选项将该图像加载到本地图像存储中--output
:
$ docker buildx build \
--output type=docker,name=<registry>/<image> .
如果您提供和选项,Buildx CLI 将自动使用docker
导出器并将其加载到映像存储:--tag
--load
$ docker buildx build --tag <registry>/<image> --load .
使用驱动程序构建图像docker
会自动加载到本地图像存储中。
构建完成后,加载到图像存储中的图像可以docker run
立即使用,并且当您运行命令时,您将在图像列表中看到它们docker images
。
推送到注册表
要将构建的映像推送到容器注册表,您可以使用registry
或
image
导出器。
当您将该--push
选项传递给 Buildx CLI 时,您指示 BuildKit 将构建的映像推送到指定的注册表:
$ docker buildx build --tag <registry>/<image> --push .
在底层,这使用image
导出器并设置push
参数。它与使用以下选项的长格式命令相同--output
:
$ docker buildx build \
--output type=image,name=<registry>/<image>,push=true .
您还可以使用registry
导出器,它可以执行相同的操作:
$ docker buildx build \
--output type=registry,name=<registry>/<image> .
将图像布局导出到文件
您可以使用oci
或docker
导出器将构建结果保存到本地文件系统上的图像布局。这两个导出器都会生成包含相应图像布局的 tar 存档文件。该dest
参数定义 tarball 的目标输出路径。
$ 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
导出文件系统
如果您不想从构建结果构建映像,而是导出构建的文件系统,则可以使用local
和tar
导出器。
导出local
器将文件系统解压到指定位置的目录结构中。导出tar
器创建一个 tarball 存档文件。
$ docker buildx build --output type=tar,dest=<path/to/output> .
导出器在多阶段构建local
中非常有用,
因为它允许您仅导出最少数量的构建工件,例如独立的二进制文件。
仅缓存导出
cacheonly
如果您只想运行构建而不导出任何输出,则可以使用导出器。例如,如果您想运行测试构建,这可能很有用。或者,如果您想先运行构建,然后使用后续命令创建导出。导出器cacheonly
创建构建缓存,因此任何后续构建都是即时的。
$ docker buildx build --output type=cacheonly
如果您不指定导出器,并且不提供类似自动选择适当导出器的速记选项
--load
,则 Buildx 默认使用cacheonly
导出器。除非您使用docker
驱动程序进行构建,在这种情况下您将使用docker
导出器。
cacheonly
作为默认值使用时,Buildx 会记录一条警告消息:
$ 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
多个出口商
您只能为任何给定的构建指定一个导出器(有关详细信息,请参阅 此拉取请求)。但您可以依次执行多个构建,以将相同的内容导出两次。 BuildKit 会缓存构建,因此除非任何层发生更改,否则第一个层之后的所有后续构建都是即时的。
以下示例展示了如何运行相同的构建两次,首先使用
image
,然后使用local
.
$ docker buildx build --output type=image,tag=<registry>/<image> .
$ docker buildx build --output type=local,dest=<path/to/output> .
配置选项
本节介绍一些可供导出器使用的配置选项。
此处描述的选项对于至少两种或多种导出器类型是通用的。此外,不同的导出器类型也支持特定的参数。有关适用的配置参数的更多信息,请参阅有关每个导出器的详细页面。
这里描述的常见参数是:
压缩
导出压缩输出时,您可以配置要使用的确切压缩算法和级别。虽然默认值提供了良好的开箱即用体验,但您可能希望调整参数以优化存储与计算成本。更改压缩参数可以减少所需的存储空间,并缩短图像下载时间,但会增加构建时间。
要选择压缩算法,您可以使用该compression
选项。例如,要构建一个image
with compression=zstd
:
$ docker buildx build \
--output type=image,name=<registry>/<image>,push=true,compression=zstd .
使用参数compression-level=<value>
旁边的选项compression
来选择支持它的算法的压缩级别:
- 0-9 为
gzip
和estargz
- 0-22 为
zstd
一般来说,数字越大,生成的文件越小,压缩运行所需的时间也越长。
如果请求的压缩算法与先前的压缩算法不同,请使用该force-compression=true
选项强制重新压缩从先前图像导入的图层。
笔记
和
gzip
压缩estargz
方法使用compress/gzip
包,同时zstd
使用github.com/klauspost/compress/zstd
包。
OCI 媒体类型
、和导出image
器创建容器映像。这些导出器支持 Docker 媒体类型(默认)和 OCI 媒体类型registry
oci
docker
要导出设置了 OCI 媒体类型的图像,请使用oci-mediatypes
属性。
$ docker buildx build \
--output type=image,name=<registry>/<image>,push=true,oci-mediatypes=true .
下一步是什么
阅读每个出口商的信息,了解他们的工作方式以及如何使用它们: