Docker Buildx 构建多架构镜像

打印 上一主题 下一主题

主题 1060|帖子 1060|积分 3180

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Docker Buildx 构建多架构镜像

简介

buildx 是 Docker 官方提供的一个构建工具,它可以帮助用户快速、高效地构建 Docker 镜像,并支持多种平台的构建。使用 buildx,用户可以在单个命令中构建多种架构的镜像,比方 x86 和 ARM 架构,而无需手动操作多个构建命令。此外,buildx 还支持 Dockerfile 的多阶段构建和缓存,这可以大大进步镜像构建的服从和速度。
安装

buildx 是一个管理 Docker 构建的 CLI 插件,底层使用 BuildKit 扩展了 Docker 构立功能。
   ##blue##
BuildKit 是 Docker 官方提供的一个高性能构建引擎,可以用来替代 Docker 原有的构建引擎。相比于原有引擎,BuildKit 具有更快的构建速度、更高的并行性、更少的资源占用和更好的安全性。
  要安装并使用 buildx,需要 Docker Engine 版本号大于便是 19.03。
假如你使用的是 Docker Desktop,则默认安装了 buildx。可以使用 docker buildx version 命令查看安装版本,得到以下类似输出,证实已经安装过了。
  1. $ docker buildx version
  2. github.com/docker/buildx v0.9.1 ed00243a0ce2a0aee75311b06e32d33b44729689
复制代码
假如需要手动安装,可以从 GitHub 发布页面下载对应平台的最新二进制文件,重定名为 docker-buildx,然后将其放到 Docker 插件目次下(Linux/Mac 系统为 $HOME/.docker/cli-plugins,Windows 系统为 %USERPROFILE%.docker\cli-plugins)。
Linux/Mac 系统还需要给插件增加可实行权限 chmod +x ~/.docker/cli-plugins/docker-buildx,之后就可以使用 buildx 了。
更详细的安装过程可以参考官方文档。
使用

1.使用 imagetools 来查抄跨平台镜像的 manifest 信息
  1. $ docker buildx imagetools inspect jianghushinian/hello-go
  2. Name:      docker.io/jianghushinian/hello-go:latest
  3. MediaType: application/vnd.docker.distribution.manifest.list.v2+json
  4. Digest:    sha256:51199dadfc55b23d6ab5cfd2d67e38edd513a707273b1b8b554985ff562104db
  5. Manifests:
  6.   Name:      docker.io/jianghushinian/hello-go:latest@sha256:8032a6f23f3bd3050852e77b6e4a4d0a705dfd710fb63bc4c3dc9d5e01c8e9a6
  7.   MediaType: application/vnd.docker.distribution.manifest.v2+json
  8.   Platform:  linux/arm64
  9.   Name:      docker.io/jianghushinian/hello-go:latest@sha256:fd46fd7e93c7deef5ad8496c2cf08c266bac42ac77f1e444e83d4f79d58441ba
  10.   MediaType: application/vnd.docker.distribution.manifest.v2+json
  11.   Platform:  linux/amd64
复制代码
可以看到,这个跨平台镜像包罗了两个目的平台的镜像,分别是 linux/arm64 和 linux/amd64
2.用 docker buildx 来构建跨平台镜像
  1. $ docker buildx build --platform linux/arm64,linux/amd64 -t jianghushinian/hello-go .
复制代码
docker buildx build 语法跟 docker build 一样,--platform 参数表现构建镜像的目的平台,-t 表现镜像的 Tag,. 表现上下文为当前目次。
唯一不同的是对 --platform 参数的支持,docker build 的 --platform 参数只支持通报一个平台信息,如 --platform linux/arm64,也就是一次只能构建单个平台的镜像。
而使用 docker buildx build 构建镜像则支持同时通报多个平台信息,中心使用英文逗号分隔,这样就实现了只用一条命令便可以构建跨平台镜像的功能。
实行以上命令后,我们将会得到一条警告:
  1. 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
复制代码
这条警告提示我们没有为 docker-container 驱动程序指定输出,天生结果将只会保留在构建缓存中,使用 --push 可以将镜像推送到 Docker Hub 远程堆栈,使用 --load 可以将镜像生存在当地。
这是因为我们新创建的 mybuilder 是启动了一个容器来运行 BuildKit,它并不能直接将构建好的跨平台镜像输出到本机或推送到远程,必须要用户来手动指定输出位置。
我们可以实验指定 --load 将镜像生存的本田主机。
  1. $ docker buildx build --platform linux/arm64,linux/amd64 -t jianghushinian/hello-go --load .
  2. [+] Building 0.0s (0/0)
  3. ERROR: docker exporter does not currently support exporting manifest lists
复制代码
结果会得到一条错误日记。看来它并不支持直接将跨平台镜像输出到本机,这实在是因为通报了多个 --platform 的关系,假如 --platform 只通报了一个平台,则可以使用 --load 将构建好的镜像输出到本机。
那么我们就只能通过 --push 参数将跨平台镜像推送到远程堆栈了。不外在此之前需要确保使用 docker login 完成登录。
  1. $ docker buildx build --platform linux/arm64,linux/amd64 -t jianghushinian/hello-go --push .
复制代码
如今登录 Docker Hub 就可以看见推送上来的跨平台镜像了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表