buildx 可用于在单个平台上实现,跨 CPU 架构编译。
buildx 实现 依赖 QEMU (开源的模拟器),支持多种cpu 架构,比如 ARM、Power-PC 和 RISC-V。
QEMU 可以模拟一个完整的操作系统(开销较大)。
QEMU还有一种用户态模式,基于 binfmt_misc 模拟目标硬件的用户空间,该模式可以创建轻量级的虚拟机(chroot 或者 容器)。通过该方式 提供多种平台的虚拟机,然后基于Dockerfile进行编译,平台不通,但Dockerfile是同一份。
小结:
buildx 会通过 QEMU
和 binfmt_misc
分别为 3 个不同的 CPU 架构(arm,arm64 和 amd64)构建 3 个不同的镜像。构建完成后,就会创建一个 manifest list,其中包含了指向这 3 个镜像的指针。
版本要求: Docker 19.03
比如我的x86_64环境, docker 恰好是 19.03
# uname -a
Linux control02 5.9.11-1.el7.elrepo.x86_64 #1 SMP Tue Nov 24 09:45:34 EST 2020 x86_64 x86_64 x86_64 GNU/Linux
# docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:03:45 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:21 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
centos 安装
选一个 buildx github 发布版本 安装即可
https://github.com/docker/buildx/releases/tag/v0.8.2
mkdir -vp ~/.docker/cli-plugins/
curl --silent -L "https://github.com/docker/buildx/releases/download/v0.8.2/buildx-v0.8.2.linux-amd64" > ~/.docker/cli-plugins/docker-buildx
chmod a+x ~/.docker/cli-plugins/docker-buildx
参考: https://icloudnative.io/posts/multiarch-docker-with-buildx/
网友评论