Install Docker
Install Docker Registry
Install buildx
-
buildx默认使用的 构建器( builder ) 驱动是docker driver,它不支持同时构建多个 platform 的镜像
# 查看默认构建器
docker buildx ls

- 使用
docker buildx create创建docker-container driver的构建器
BUILDER_NAME=multiArch-cloudNative
# export image to localhost registry
## https://github.com/docker/buildx/issues/94
## https://stackoverflow.com/questions/60430255/using-docker-buildx-failed-to-push-image-to-resgistry-no-such-host
docker buildx create --name multiArch-opt-driver --driver-opt network=host --use
# docker buildx create --name $BUILDER_NAME --use
# docker buildx use $BUILDER_NAME

- 启动容器 buildx_buildkit
# docker buildx自动下载 moby/buildkit:buildx-stable-1 镜像
docker buildx inspect --bootstrap

- Multi-platform build: Docker uses QEMU to emulate other architectures for multi-platform builds. Make sure that QEMU is installed and that Docker is configured to use it.
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
- QEMU 仿真支持
docker pull tonistiigi/binfmt
docker run --privileged --rm tonistiigi/binfmt --install all
cat /proc/sys/fs/binfmt_misc/qemu-aarch64


Usage
-
--push:将构建的镜像推送到镜像仓库
同时进行多架构编译
docker buildx build --push --platform linux/amd64,linux/arm64 \
--pull --no-cache \
--build-arg "TAG=$BASE_IMAGE_VERSION" -t localhost:5000/my-image:1.0.0 .
在x86_64环境编译aarch64镜像
image_name=my-image
version=1.0.0
docker buildx build --push --platform linux/arm64 \
--pull --no-cache \
-f Dockerfile.aarch64 \
-t localhost:5000/${image_name}:${version} .
Pull image
pull image时加上--platform参数
docker pull localhost:5000/my-image:1.0.0 --platform=linux/arm64
docker pull localhost:5000/my-image:1.0.0 --platform=linux/amd64
FAQ
Install buildx separately
As of Docker Engine 23.0 and Docker Desktop 4.19, Buildx is the default build client.
ARCH=$(uname -m)
[ "${ARCH}" == "x86_64" ] && ARCH=amd64
[ "${ARCH}" == "aarch64" ] && ARCH=arm64
BUILDX_VERSION=v0.10.4
wget https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-${ARCH}
mkdir -pv ~/.docker/cli-plugins
mv buildx-${BUILDX_VERSION}.linux-${ARCH} ~/.docker/cli-plugins/
ls -alh $HOME/.docker/cli-plugins
chmod +x ~/.docker/cli-plugins/docker-buildx
ERROR: multiple platforms feature is currently not supported for docker driver. Please switch to a different driver (eg. "docker buildx create --use")
# 确保默认的构建器是 buildx
docker buildx ls
docker buildx create --name multiArch-cloudNative
docker buildx use multiArch-cloudNative
docker buildx inspect --bootstrap