使用qemu和buildx来构建多架构的image
FAQ
可能遇到没有conf, 参考这个仓库 https://github.com/computermouth/qemu-static-conf
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> .
- 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
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
完整的步骤总结:
- 安装 Docker 和
qemu-user-static
。 - 启用 Docker 的多平台构建支持。
- 使用
docker buildx
构建 ARM64 镜像。 - 使用
docker run
运行 ARM64 镜像。
通过这种方式,您可以在 AMD64 架构的机器上构建并运行 ARM64 架构的 Docker 镜像。