导出器概述
导出器将构建结果保存为指定的输出类型。您可以指定
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 .
大多数常见使用案例不需要您指定要使用的导出器
明确地。如果您打算自定义,则只需指定导出器
输出,或者如果要将其保存到磁盘。这--load
和--push
options 允许 Buildx 推断要使用的导出器设置。
例如,如果您使用--push
选项与--tag
、 构建
自动使用image
exporter 中,并配置 exporter 以推送
结果复制到指定的注册表中。
为了获得 BuildKit 提供的各种导出器的全部灵活性,
您可以使用--output
标志,用于配置导出器选项。
使用案例
每种导出器类型都针对不同的使用案例而设计。以下部分 描述一些常见场景,以及如何使用导出器生成 output 的 Output。
加载到镜像存储
Buildx 通常用于构建可以加载到镜像中的容器镜像
商店。这就是docker
exporter 进来。以下示例显示了
如何使用docker
exporter 中,并将该镜像加载到
本地镜像存储,使用--output
选择:
$ docker buildx build \
--output type=docker,name=<registry>/<image> .
Buildx CLI 将自动使用docker
exporter 并将其加载到镜像
store (如果您提供--tag
和--load
选项:
$ docker buildx build --tag <registry>/<image> --load .
使用docker
driver 会自动加载到本地
image store 中。
加载到镜像存储的镜像可用于docker run
马上
构建完成后,您将在运行
这docker images
命令。
推送到注册表
要将构建的镜像推送到容器 registry,您可以使用registry
或image
出口商。
当您传递--push
选项中,您可以指示 BuildKit 执行以下作
将构建的镜像推送到指定的注册表中:
$ docker buildx build --tag <registry>/<image> --push .
在后台,它使用image
exporter 中,并将push
参数。
这与使用以下长格式命令相同,使用--output
选择:
$ docker buildx build \
--output type=image,name=<registry>/<image>,push=true .
您还可以使用registry
exporter 执行相同的作:
$ docker buildx build \
--output type=registry,name=<registry>/<image> .
将镜像布局导出到文件
您可以使用oci
或docker
exporters 将构建结果保存到
image 布局。这两个导出器都会生成一个 tar
archive 文件。这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
exporter 将文件系统解包到
指定位置。这tar
exporter 创建一个 tarball 存档文件。
$ docker buildx build --output type=local,dest=<path/to/output> .
这local
exporter 在多阶段构建中很有用,因为它只允许您导出最少数量的构建工件,例如
自包含的Binaries。
仅缓存导出
这cacheonly
如果您只想运行构建,则可以使用 exporter,而没有
导出任何输出。例如,如果您想运行测试
建。或者,如果您想先运行构建,然后使用
后续命令。这cacheonly
exporter 会创建一个构建缓存,因此任何
连续构建是即时的。
$ docker buildx build --output type=cacheonly
如果您未指定导出器,并且未提供--load
,它会自动选择合适的导出器,Buildx 默认为
使用cacheonly
出口商。除非您使用docker
司机
在这种情况下,您可以使用docker
出口商。
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
多个导出器
您可以通过指定--output
flag 多次。这需要 Buildx 和 BuildKit 版本 0.13.0
或之后。
以下示例使用三个 不同的导出器:
- 这
registry
exporter 将镜像推送到注册表 - 这
local
exporter 将构建结果提取到本地文件系统 - 这
--load
flag (image
exporter) 将结果加载到本地镜像存储中。
$ docker buildx build \
--output type=registry,tag=<registry>/<image> \
--output type=local,dest=<path/to/output> \
--load .
配置选项
本节介绍导出器可用的一些配置选项。
此处描述的选项对于至少两个或多个导出器类型是通用的。 此外,不同的导出器类型也支持特定参数。 有关哪个导出器的更多信息,请参阅有关每个导出器的详细页面 配置参数适用。
此处描述的常见参数包括:
压缩
导出压缩输出时,您可以配置精确的压缩 algorithm 和 level 要使用的 level 来使用。虽然默认值提供了良好的 开箱即用,您可能希望调整参数以进行优化 存储与计算成本。更改压缩参数可以减少存储空间 所需空间,并缩短镜像下载时间,但会增加构建时间。
要选择压缩算法,您可以使用compression
选择。为
示例,要构建image
跟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
作为一般规则,数字越大,生成的文件越小 be,并且压缩运行所需的时间就越长。
使用force-compression=true
强制重新压缩导入的图层的选项
从上一个镜像中,如果请求的压缩算法不同于
之前的压缩算法。
注意
这
gzip
和estargz
压缩方法使用compress/gzip
包, 而zstd
使用github.com/klauspost/compress/zstd
包.
OCI 媒体类型
这image
,registry
,oci
和docker
导出器创建容器镜像。
这些导出程序支持 Docker 媒体类型(默认)和 OCI 媒体类型
要导出设置了 OCI 媒体类型的镜像,请使用oci-mediatypes
财产。
$ docker buildx build \
--output type=image,name=<registry>/<image>,push=true,oci-mediatypes=true .
下一步
阅读每个导出器的信息,了解它们的工作原理和如何使用 他们: