docker buildx构建
描述
开始构建
用法
$ docker buildx build [OPTIONS] PATH | URL | -
扩展说明
该buildx build命令使用BuildKit开始构建。此命令与命令的UI相似,docker build并带有相同的标志和参数。
有关大多数这些标志的docker build
文档,请参阅文档。在这里,我们将记录新标志的子集。
有关此命令的示例用法,请参阅下面的示例部分。
选项
| 名称,简写 | 默认 | 描述 | 
--add-host | 
    添加自定义主机到IP的映射(host:ip) | |
--allow | 
    允许额外的特权,例如network.host,security.insecure | |
--build-arg | 
    设置构建时变量 | |
--cache-from | 
    外部缓存源(例如,用户/应用程序:缓存,类型=本地,src =路径/目标/目录) | |
--cache-to | 
    缓存导出目标(例如,用户/应用程序:缓存,类型=本地,目标=路径/目标/目录) | |
--cgroup-parent | 
    容器的可选父cgroup | |
--compress | 
    使用gzip压缩构建上下文 | |
--cpu-period | 
    限制CPU CFS(完全公平的调度程序)期限 | |
--cpu-quota | 
    限制CPU CFS(完全公平的调度程序)配额 | |
--cpu-shares , -c | 
    CPU份额(相对重量) | |
--cpuset-cpus | 
    允许执行的CPU(0-3,0,1) | |
--cpuset-mems | 
    允许执行的MEM(0-3,0,1) | |
--file , -f | 
    Dockerfile的名称(默认为“ PATH / Dockerfile”) | |
--force-rm | 
    始终取出中间容器 | |
--iidfile | 
    将图像ID写入文件 | |
--isolation | 
    集装箱隔离技术 | |
--label | 
    设置图像的元数据 | |
--load | 
    --output = type = docker的简写 | |
--memory , -m | 
    内存限制 | |
--memory-swap | 
    交换限制等于内存加交换:“-1”以启用无限交换 | |
--network | 
    在构建期间为RUN指令设置网络模式 | |
--no-cache | 
    构建映像时不要使用缓存 | |
--output , -o | 
    输出目的地(格式:type = local,dest = path) | |
--platform | 
    设置目标平台 | |
--progress | 
    auto | 
    设置进度输出的类型(自动,普通,tty)。使用普通显示容器输出 | 
--pull | 
    始终尝试提取图像的较新版本 | |
--push | 
    --output = type = registry的简写 | |
--quiet , -q | 
    禁止生成输出并在成功时打印图像ID | |
--rm | 
    true | 
    成功构建后删除中间容器 | 
--secret | 
    公开文件的秘密文件:id = mysecret,src = / local / secret | |
--security-opt | 
    安全选项 | |
--shm-size | 
    / dev / shm的大小 | |
--squash | 
    将新构建的层压缩为一个新层 | |
--ssh | 
    SSH代理套接字或用于公开的密钥(格式:default | <id> [= <socket> | <key> [,<key>]]) | |
--tag , -t | 
    名称以及“ name:tag”格式的标签(可选) | |
--target | 
    设置要构建的目标构建阶段。 | |
--ulimit | 
    Ulimit选项 | |
--builder | 
    覆盖已配置的构建器实例 | 
例子
设置构建的目标平台(--platform)
--platform=value[,value]
设置构建的目标平台。FROMDockerfile中所有不带自己--platform标志的命令都会提取该平台的基础映像,并且该值也将成为生成映像的平台。默认值为buildkit守护程序的当前平台。
当docker-container与driver一起使用时buildx,此标志可以接受多个值作为输入,并用逗号分隔。具有多个值的结果将针对所有指定平台构建,并合并在一起成为一个清单清单。
如果Dockerfile需要调用RUN命令,那么构建器需要对指定平台的运行时支持。在干净的安装程序中,您只能RUN
为您的系统体系结构执行命令。如果您的内核支持binfmt_misc
辅助体系结构的启动器,则buildx将自动选择它们。Docker桌面版本随附binfmt_misc针对arm64
和arm体系结构自动配置的功能。您可以通过运行来查看当前构建器实例支持哪些运行时平台docker buildx inspect --bootstrap。
在中Dockerfile,您可以通过TARGETPLATFORMbuild参数访问当前平台值
。请参阅docker build
文档
以获取自动平台参数变体的完整说明。
平台说明符的格式在容器化的源代码中定义。
例子
$ docker buildx build --platform=linux/arm64 .
$ docker buildx build --platform=linux/amd64,linux/arm64,linux/arm/v7 .
$ docker buildx build --platform=darwin .
为构建结果设置导出操作(-o,-output)
-o, --output=[PATH,-,type=TYPE[,KEY=VALUE]
设置构建结果的导出操作。在docker build所有构建中,请先创建一个容器映像并将其导出到docker images。buildx使此步骤可配置,从而允许将结果直接导出到客户端,oci图像tarball,注册表等。
带有docker驱动程序的Buildx当前仅支持本地,tarball导出器和图像导出器。docker-container驱动程序支持所有出口商。
如果仅将路径指定为值,buildx则将使用此路径作为目标的本地导出程序。如果值为“-”,buildx将使用tar
导出器并写入stdout。
例子
$ docker buildx build -o . .
$ docker buildx build -o outdir .
$ docker buildx build -o - - > out.tar
$ docker buildx build -o type=docker .
$ docker buildx build -o type=docker,dest=- . > myimage.tar
$ docker buildx build -t tonistiigi/foo -o type=registry
支持的导出类型为:
local
在local出口型的所有结果文件写入到客户端上的目录。新文件将归当前用户所有。在多平台构建中,所有结果将通过其平台放在子目录中。
属性键:
dest-将在其中写入文件的目标目录
tar
该tar出口型写入所有结果文件,在客户端上一个压缩包。在多平台构建中,所有结果将通过其平台放入子目录中。
属性键:
dest-将要写入tarball的目标路径。“-”写入标准输出。
oci
在oci出口型的效果图或清单列表写为OCI图像布局
客户端压缩包。
属性键:
dest-将要写入tarball的目标路径。“-”写入标准输出。
docker
在docker出口型的单平台的结果图像作为写入泊坞窗图像规范
在客户端上压缩包。该出口商创建的Tarball也与OCI兼容。
当前,不能使用docker导出类型导出多平台图像。多平台映像的最常见用例是直接推送到注册表(请参阅参考资料registry)。
属性键:
dest-将要写入tarball的目标路径。如果未指定,则tar将自动加载到当前docker实例。context-将结果导入到的Docker上下文的名称
image
该image出口写入构建结果作为图像或清单列表。使用docker驱动程序时,图像将出现在中docker images。(可选)可以通过指定属性将图像自动推送到注册表。
属性键:
name-新图像的名称(引用)。push-布尔值以自动推送图像。
registry
该registry出口是一条捷径type=image,push=true。
将生成结果推送到注册表(--push)
的简写--output=type=registry。将自动将生成结果推送到注册表。
将单平台构建结果加载到docker images(--load)
的简写--output=type=docker。将自动将单平台构建结果加载到docker images。
使用外部缓存源进行构建(--cache-from)
--cache-from=[NAME|type=TYPE[,KEY=VALUE]]
使用外部缓存源进行构建。支持的类型为registry和local。所述registry源可以从注册表中缓存清单或(特殊)图像构造导入缓存。该local源可从以前导出的本地文件导入缓存--cache-to。
如果未指定类型,则registry导出器将与指定的引用一起使用。
docker 驱动程序当前仅支持从注册表导入构建缓存。
例子
$ docker buildx build --cache-from=user/app:cache .
$ docker buildx build --cache-from=user/app .
$ docker buildx build --cache-from=type=registry,ref=user/app .
$ docker buildx build --cache-from=type=local,src=path/to/cache .
将构建缓存导出到外部缓存目标(--cache-to)
--cache-to=[NAME|type=TYPE[,KEY=VALUE]]
将构建缓存导出到外部缓存目标。支持的类型包括registry,
local和inline。注册表导出将缓存生成到注册表中的缓存清单,本地导出缓存到客户端上的本地目录,然后内联将缓存元数据写入映像配置。
docker驱动程序当前仅支持将内联缓存元数据导出到映像配置。或者,--build-arg BUILDKIT_INLINE_CACHE=1可以用来触发内联缓存导出器。
属性键:
mode-指定与高速缓存一起导出的层数。在最后的构建阶段中,仅在已导出的层上“最小”,在所有阶段中的“最大”导出层。元数据总是在整个构建过程中导出。
例子
$ docker buildx build --cache-to=user/app:cache .
$ docker buildx build --cache-to=type=inline .
$ docker buildx build --cache-to=type=registry,ref=user/app .
$ docker buildx build --cache-to=type=local,dest=path/to/cache .
允许额外的特权(--allow)
--allow=ENTITLEMENT
允许额外的特权。权利清单:
network.host-允许通过主机网络执行。security.insecure-允许无沙箱执行。请参阅 相关的Dockerfile扩展。
要启用权利,buildkitd守护程序还需要允许它们--allow-insecure-entitlement(请参阅参考资料create --buildkitd-flags)
例子
$ docker buildx create --use --name insecure-builder --buildkitd-flags '--allow-insecure-entitlement security.insecure'
$ docker buildx build --allow security.insecure .
上级命令
| 命令 | 描述 | 
|---|---|
| docker buildx | 使用BuildKit进行构建 | 
相关命令
| 命令 | 描述 | 
| docker buildx烘烤 | 从文件构建 | 
| docker buildx构建 | 开始构建 | 
| docker buildx创建 | 创建一个新的构建器实例 | 
| docker buildx du | 磁盘使用情况 | 
| docker buildx imagetools | 在注册表中处理图像的命令 | 
| docker buildx检查 | 检查当前的构建器实例 | 
| docker buildx ls | 列出构建器实例 | 
| docker buildx修剪 | 删除构建缓存 | 
| docker buildx rm | 删除构建器实例 | 
| docker buildx停止 | 停止构建器实例 | 
| docker buildx使用 | 设置当前的构建器实例 | 
| docker buildx版本 | 显示buildx版本信息 |