跨平台编译运行
方案
镜像跨平台编译有两种方式:
1. 使用 binfmt
实现镜像跨平台编译运行
2. 使用 qemu-user-static
实现镜像跨平台编译运行
涉及镜像
以下是涉及到的镜像列表:
tonistiigi/binfmt
lcr.loongnix.cn/tonistiigi/binfmt
cr.loongnix.cn/tonistiigi/binfmt
multiarch/qemu-user-static
lcr.loongnix.cn/library/qemu-user-static
cr.loongnix.cn/library/qemu-user-static
x86 仿真运行编译 LA ABI 1.0
运行前提
需要更换 Docker 的默认 BuildKit,详情参考:Buildx 配置文档。
以下两种方式任选其一:
1. 使用 binfmt
- 获取所需镜像:
docker pull cr.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch
- 注册
qemu-loongarch64
:
docker run --rm --privileged cr.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch --install loongarch64
- 拉取 LA 镜像:
docker pull --platform=linux/loong64 cr.loongnix.cn/library/alpine:3.11
- 指定 LA 架构进行编译运行:
docker buildx build --platform linux/loong64 -t example_image -f example .
2. 使用 qemu-user-static
- 获取所需镜像和二进制:
docker pull cr.loongnix.cn/library/qemu-user-static
wget https://github.com/Loongson-Cloud-Community/qemu-user-static/releases/download/x86_abi1.0/qemu-loongarch64-static
- 注册
qemu-loongarch64
并放置二进制:
docker run --rm -it --privileged zhangguanzhang/qemu-user-static --reset -p yes
- 拉取 LA 镜像:
docker pull --platform=linux/loong64 cr.loongnix.cn/library/debian:buster
- 指定 LA 架构进行编译运行:
docker buildx build --platform linux/loong64 -t example_image -f example .
docker run -it --rm cr.loongnix.cn/library/debian:buster uname -a
x86 仿真运行编译 LA ABI 2.0
以下两种方式任选其一:
1. 使用 binfmt
- 获取所需镜像:
docker pull tonistiigi/binfmt:master
- 注册
qemu-loongarch64
:
docker run --rm --privileged tonistiigi/binfmt:master --install loongarch64
- 拉取 LA 镜像:
docker pull --platform=linux/loong64 lcr.loongnix.cn/library/alpine:latest
- 指定 LA 架构进行编译运行:
docker buildx build --load --platform linux/loong64 -t example_image -f example .
2. 使用 qemu-user-static
- 获取所需镜像和二进制:
//docker pull multiarch/qemu-user-static:latest 目前暂时无法使用
wget https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-loongarch64-static
- 注册
qemu-loongarch64
并放置二进制:
//docker run --rm -it --privileged multiarch/qemu-user-static:latest --reset
mv qemu-loongarch64-static /usr/bin/qemu-loongarch64-static
- 拉取 LA 镜像:
docker pull --platform=linux/loong64 lcr.loongnix.cn/library/alpine:latest
- 指定 LA 架构进行编译运行:
docker buildx build --platform linux/loong64 -t example_image -f example .
docker run -it --rm --platform loong64 -v $(pwd)/qemu-loongarch64-static:/usr/bin/qemu-loongarch64-static lcr.loongnix.cn/library/alpine uname -m
注意事项
- ABI 1.0 和 ABI 2.0 不兼容
- 使用
binfmt
或 qemu-user-static
仿真运行时需要明确区分 ABI 版本。
-
切换版本时需清理注册的 qemu
配置。
-
清理已注册的 qemu
:
- 若使用
binfmt
:
docker run --rm --privileged xx.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch --uninstall loongarch64
注意:xx代表cr或lcr 根据abi 1.0和2.0来选择使用
- 若使用
qemu-user-static
:
rm /usr/bin/qemu-loongarch64-static
LA 仿真运行编译 x86
ABI 1.0 和 ABI 2.0 下的方法类似,但需要选择相应的镜像与工具。
仿真运行的镜像和二进制地址
- ABI 1.0:
- 镜像:
cr.loongnix.cn/tonistiigi/binfmt:loongarch64_other_arch
- 二进制:下载地址
- ABI 2.0:
- 镜像:
lcr.loongnix.cn/library/binfmt:latest
- 二进制:下载地址