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针对arm64arm体系结构自动配置的功能。您可以通过运行来查看当前构建器实例支持哪些运行时平台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 imagesbuildx使此步骤可配置,从而允许将结果直接导出到客户端,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]]

使用外部缓存源进行构建。支持的类型为registrylocal。所述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]]

将构建缓存导出到外部缓存目标。支持的类型包括registrylocalinline。注册表导出将缓存生成到注册表中的缓存清单,本地导出缓存到客户端上的本地目录,然后内联将缓存元数据写入映像配置。

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版本信息