使用qemu和buildx来构建多架构的image

FAQ

  1. 可能遇到没有conf, 参考这个仓库 https://github.com/computermouth/qemu-static-conf

  2. 参考这个仓库 https://github.com/multiarch/qemu-user-static

 Install QEMU and binfmt-support.
Code

   sudo apt-get update
   sudo apt-get install qemu-user-static binfmt-support
Register QEMU for emulation.
Code

   docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
Build the Docker image:
Using Buildx: (Recommended)
Buildx is a Docker CLI plugin that simplifies multi-platform builds.
Code

     docker buildx build --platform linux/arm/v7 -t <image-name> .
  1. run的方式
sudo cp qemu-aarch64-static /usr/bin/
sudo chmod +x /usr/bin/qemu-aarch64-static
# 注册虚拟机
docker run --rm --privileged multiarch/qemu-user-static:register --reset
# run 容器
docker run --rm -it \
-v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static \
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
arm64v8/ubuntu:20.04 \
bash

# 还可以通过如下方式启动
docker run --platform linux/arm64 -it ubuntu bash

  1. buildx使用 https://waynerv.com/posts/building-multi-architecture-images-with-docker-buildx/

Reasoned for 8 seconds

要在 AMD64 架构的 Linux 系统上使用 Docker 构建 ARM64 架构的镜像并运行它,您可以使用 Docker 的多平台构建功能和 QEMU 作为模拟器来实现。

1. 安装 Docker 并启用多平台支持

首先,确保您已经安装了 Docker。如果还没有安装,可以使用以下命令来安装 Docker(假设您使用的是 Ubuntu):

sudo apt update
sudo apt install docker.io

确保 Docker 支持多平台构建:

docker --version

如果您的 Docker 版本较旧,可能需要更新 Docker 以支持多平台构建。您可以按照 Docker 官方文档 来安装最新版本。

2. 安装 qemu-user-static 和启用多架构支持

为了在 AMD64 系统上构建 ARM64 镜像,您需要安装 qemu-user-static 来支持不同架构的模拟。可以通过以下命令安装:

sudo apt install qemu-user-static

然后,您需要在 Docker 中启用多平台支持:

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

3. 构建 ARM64 镜像

一旦您安装了必要的工具并启用了多架构支持,您就可以使用 docker buildx 来构建 ARM64 架构的镜像。buildx 是 Docker 提供的扩展,用于支持多平台构建。

首先,确保启用了 Docker Buildx:

docker buildx create --use

然后,使用以下命令构建 ARM64 镜像:

docker buildx build --platform linux/arm64 -t my-arm64-image .

这将构建一个 ARM64 架构的镜像并命名为 my-arm64-image

4. 运行 ARM64 镜像

构建完成后,您可以使用以下命令运行 ARM64 架构的镜像:

docker run --rm --platform linux/arm64 my-arm64-image

完整的步骤总结:

  1. 安装 Docker 和 qemu-user-static
  2. 启用 Docker 的多平台构建支持。
  3. 使用 docker buildx 构建 ARM64 镜像。
  4. 使用 docker run 运行 ARM64 镜像。

通过这种方式,您可以在 AMD64 架构的机器上构建并运行 ARM64 架构的 Docker 镜像。