Docker Buildx插件

Overview

Docker Buildx是一个CLI插件,它扩展了Docker命令,完全支持Moby BuildKit builder toolkit提供的功能。它提供了与docker build相同的用户体验,并提供了许多新功能,如创建作用域生成器实例和针对多个节点并发构建。

安装

Docker Buildx包含在Docker19.03中,并与以下Docker Desktop版本捆绑在一起。请注意,必须启用“实验特性”选项才能使用Docker Buildx。

Docker Desktop Enterprise version 2.1.0
Docker Desktop Edge version 2.0.4.0 or higher

还可以从Docker buildx存储库下载最新的buildx二进制文件。

Build with buildx

To start a new build, run the command docker buildx build .

$ docker buildx build .

[+] Building 8.4s (23/32)

=> …

Buildx使用BuildKit引擎生成,并且不需要DOCKER_BuildKit=1环境变量来启动生成。 docker buildx build命令支持docker build可用的功能,包括docker 19.03中的新功能,如输出配置、内联构建缓存和指定目标平台。此外,Buildx还支持常规docker构建尚不可用的新功能,如构建清单列表、分布式缓存和将构建结果导出到OCI映像tarballs。 可以在通过驱动程序概念公开的不同配置中运行Buildx。目前,Docker支持一个“Docker”驱动程序,该驱动程序使用绑定到Docker守护程序二进制文件中的BuildKit库,以及一个“Docker容器”驱动程序,该驱动程序在Docker容器中自动启动BuildKit。

不同驱动程序使用Buildx的用户体验非常相似。但是,有一些特性目前不受“docker”驱动程序的支持,因为绑定到docker后台程序中的BuildKit库使用不同的存储组件。相反,默认情况下,使用“docker”驱动程序生成的所有图像都会自动添加到“docker images”视图中,而在使用其他驱动程序时,需要使用–output选择输出图像的方法。

使用生成器实例

默认情况下,如果支持的话,Buildx使用“docker”驱动程序,提供的用户体验与本机docker构建非常相似。请注意,必须使用本地共享守护程序来构建应用程序。

Buildx允许创建独立构建器的新实例。可以使用它来为CI构建获取一个作用域环境,该环境不会更改共享守护程序的状态,或者用于隔离不同项目的生成。可以为一组远程节点创建一个新实例,形成一个构建场,并在它们之间快速切换。

可以使用docker buildx create命令创建新实例。这将基于当前的配置创建一个新的构建器实例,其中包含一个节点。

要使用远程节点,可以在创建新生成器时指定DOCKER_HOST或远程上下文名称。创建新实例后,可以使用inspect、stop和rm命令管理其生命周期。要列出所有可用的生成器,请使用ls。在创建一个新的构建器之后,还可以向它添加新的节点。

要在不同的构建器之间切换,请使用docker buildx
use。运行此命令后,生成命令将自动使用此生成器。

Docker 19.03还提供了一个新的Docker context命令,可以使用该命令为远程Docker API端点提供名称。Buildx与docker context集成,确保所有上下文自动获得一个默认的builder实例。也可以在创建新的生成器实例或向其中添加节点时将上下文名称设置为目标。 构建多平台镜像

BuildKit被设计成可以很好地为多个平台进行构建,而不仅仅适用于调用构建的用户不经常运行的体系结构和操作系统。

调用构建时,可以设置–platform标志以指定生成输出的目标平台(例如,linux/amd64、linux/arm64、darwin/amd64)。

当当前builder实例由“docker
container”驱动程序支持时,可以一起指定多个平台。在本例中,它构建一个清单列表,其中包含所有指定架构的映像。当在docker run或docker service中使用此映像时,docker会根据节点的平台选择正确的映像。

可以使用Buildx和Dockerfiles支持的三种不同策略构建多平台映像:

在内核中使用QEMU仿真支持

使用同一生成器实例在多个本机节点上构建

使用Dockerfile中的stage交叉编译到不同的架构

如果节点已经支持QEMU,那么QEMU是最简单的开始方法(例如。如果使用的是Docker Desktop)。它不需要更改Dockerfile,BuildKit会自动检测可用的辅助架构。当BuildKit需要为不同的体系结构运行一个二进制文件时,它会通过binfmt_misc处理程序中注册的二进制文件自动加载它。

使用多个本机节点可以更好地支持QEMU无法处理的更复杂的情况,并且通常具有更好的性能。可以使用–append标志向构建器实例添加其他节点。

assuming

contexts node-amd64 and node-arm64 exist in “docker context ls”

$ docker
buildx create --use --name mybuild
node-amd64

mybuild

$ docker
buildx create --append --name mybuild
node-arm64

$ docker buildx build --platform
linux/amd64,linux/arm64 .

最后,根据您的项目,使用的语言可能对交叉编译有很好的支持。在这种情况下,Dockerfiles中的多阶段构建可以有效地用于使用–platform指定的平台,使用构建节点的本机架构来构建二进制文件。BUILDPLATFORM和TARGETPLATFORM等构建参数列表在Dockerfile中自动提供,并可供作为构建的一部分运行的进程使用。

FROM
–platform=$BUILDPLATFORM golang:alpine AS build

ARG
TARGETPLATFORM

ARG
BUILDPLATFORM

RUN echo
“I am running on $BUILDPLATFORM, building for $TARGETPLATFORM” >
/log

FROM alpine

COPY --from=build /log /log

高级生成选项

Buildx还旨在为高级构建概念提供支持,这些概念不仅仅是调用单个构建命令。

BuildKit高效地处理多个并发生成请求和重复数据消除工作。构建命令可以与通用命令运行器(例如make)结合使用。但是,这些工具通常按顺序调用构建,因此不能充分利用BuildKit并行化的潜力,也不能为用户组合BuildKit的输出。对于这个用例,添加了一个名为docker buildx bake的命令。

bake命令支持从合成文件构建图像,类似于合成构建,但允许将所有服务作为单个请求的一部分同时构建。

将buildx设置为默认生成器

运行命令docker buildx install将docker buildx命令设置为docker buildx的通假名。这使得docker build能够使用当前buildx builder。

要删除此通假名,请运行docker buildx uninstall。

Docker Buildx插件相关推荐

  1. 巧用 Docker Buildx 构建多种系统架构镜像

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! Docker Buildx 是一个 Docker CLI 插件,其扩展了 Docker 命令,支持 Moby Bu ...

  2. docker buildx 构建arm64架构镜像

    文章目录 buildx测试 前提条件 安装 构建镜像 推送http私库问题 docker容器里运行docker buildx 在x86架构下如何打包arm64架构的镜像,docker buildx 是 ...

  3. Docker 的插件式设计

    http://www.tuicool.com/articles/MnIRZvJ http://uzhima.com/2016/08/02/what-is-docker-volume-plugin/ 在 ...

  4. 如何使用 Docker Buildx Bake 创建复杂的镜像构建管道

    docker buildx命令组使用BuildKit来公开高级图像构建功能.烘焙构建是一种高级功能,可用于定义自动构建管道.它们使您可以从单个构建操作中生成多个图像. 当您想要发布图像的不同变体或并行 ...

  5. 【Docker系列】 Docker 多架构支持 和 Docker Buildx 构建多架构

    Docker 的多架构支持 docker自适应了CPU的架构 会自动选择架构的版本 镜像 多架构的标签,会自动选择适合的标签. 使用 buildx 构建多架构镜像 Windows和Mac的桌面版Doc ...

  6. docker使用buildx构建不同架构镜像

    启用 buildx 插件 要想使用 buildx,首先要确保 Docker 版本不低于 19.03,同时还要通过设置环境变量 DOCKER_CLI_EXPERIMENTAL 来启用.可以通过下面的命令 ...

  7. docker 打包_Springboot2.0学习11 使用maven插件打包docker部署应用

    一.本文目标 使用Maven插件构建SpringBoot应用的docker镜像 镜像推送至Docker Registry 启动容器 本文开发环境 : jdk1.8 maven idea SpringB ...

  8. 使用maven插件构建docker镜像

    为什么要用插件 主要还是自动化的考虑,如果额外使用Dockerfile进行镜像生成,可能会需要自己手动指定jar/war位置,并且打包和生成镜像间不同步,带来很多琐碎的工作. 插件选择 使用比较多的是 ...

  9. 细粒度权限控制 linux,利用docker插件实现细粒度权限控制

    前言 我们在实际的docker运行环境下,大都会遇到多用户的情况,为了安全起见,有些用户我们不想给予其全面的docker控制权限,比如不想某些用户执行docker stop 以及docker rm 等 ...

最新文章

  1. FreeRTOS学习笔记4-FreeRTOS配置管理
  2. 2020计算机考研准备,2020考研:什么时候开始准备考研最合适?
  3. 双系统格盘后因grub无法进入xp系统问题,将linux所在分区格后启动停在grub。。。无法进入系统
  4. mysql uuid_short 为什么不存在_MySQL内置函数uuid和uuid_short
  5. RxSwift 系列(一)
  6. mysql unable to find_centos8.2安装mysql8.0时报错Error:Unable to find a match: mysql-community-server...
  7. html提值到php 冒泡,如何实现Html事件冒泡
  8. 为什么黑客无法攻击公开的区块链?
  9. 物联网处理器五大类型应用分析指南
  10. ASCII、GB2312、GBK、GB18030、Unicode、UTF-8、BIG5 编码分析
  11. 计算机毕业设计(附源码)python-志愿者管理系统
  12. pta计算个人所得税
  13. 集装箱装柜计算机器在线,集装箱装柜数智能计算表
  14. GeeM2引擎弹出装备显示框的设置方法
  15. ClickHouse 物化视图在微信的实战
  16. python实训day1
  17. 你想要的样子 我都有
  18. VMware虚拟机无法连接外网怎么解决
  19. win10电脑自动配置ipv4地址169怎么办?win10电脑关闭自动配置ipv4地址的方法
  20. Android扫一扫和生成二维码(使用华为ScanKit)

热门文章

  1. 两步完成项目定时启动,java项目定时启动
  2. GCC 连接器、链接标准库 gcc -l、链接手动创建库(指定目录的库 gcc -L)
  3. array.array python yhzf
  4. 受用一生的高效 PyCharm 使用技巧(六)
  5. 将人工智能模型压缩到微控制器中
  6. 目标检测数据集The Object Detection Dataset
  7. H.265视频编码与技术全析(下)
  8. CentOS7系统下bower 命令权限问题
  9. Python的输出:Python2.7和Python3.7的区别
  10. Android getDrawable 直接使用 提示要求API为21 的处理方法