docker buildx - 跨平台编译Docker镜像

Install Docker

Linux系统 安装和卸载 docker

Install Docker Registry

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

参考文档

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容