跳转至

跨平台编译运行

方案

镜像跨平台编译有两种方式: 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

  1. 获取所需镜像:
    docker pull cr.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch
    
  2. 注册 qemu-loongarch64
    docker run --rm --privileged cr.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch --install loongarch64
    
  3. 拉取 LA 镜像:
    docker pull --platform=linux/loong64 cr.loongnix.cn/library/alpine:3.11
    
  4. 指定 LA 架构进行编译运行:
    docker buildx build --platform linux/loong64 -t example_image -f example .
    

2. 使用 qemu-user-static

  1. 获取所需镜像和二进制:
    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
    
  2. 注册 qemu-loongarch64 并放置二进制:
    docker run --rm -it --privileged zhangguanzhang/qemu-user-static  --reset -p yes
    
  3. 拉取 LA 镜像:
    docker pull --platform=linux/loong64 cr.loongnix.cn/library/debian:buster
    
  4. 指定 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

  1. 获取所需镜像:
    docker pull tonistiigi/binfmt:master
    
  2. 注册 qemu-loongarch64
    docker run --rm --privileged tonistiigi/binfmt:master --install loongarch64
    
  3. 拉取 LA 镜像:
    docker pull --platform=linux/loong64 lcr.loongnix.cn/library/alpine:latest
    
  4. 指定 LA 架构进行编译运行:
    docker buildx build --load --platform linux/loong64 -t example_image -f example .
    

2. 使用 qemu-user-static

  1. 获取所需镜像和二进制:
    //docker pull multiarch/qemu-user-static:latest 目前暂时无法使用
    wget https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-loongarch64-static
    
  2. 注册 qemu-loongarch64 并放置二进制:
    //docker run --rm -it --privileged multiarch/qemu-user-static:latest --reset
    mv qemu-loongarch64-static /usr/bin/qemu-loongarch64-static
    
  3. 拉取 LA 镜像:
    docker pull --platform=linux/loong64 lcr.loongnix.cn/library/alpine:latest
    
  4. 指定 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
    

注意事项

  1. ABI 1.0 和 ABI 2.0 不兼容
  2. 使用 binfmtqemu-user-static 仿真运行时需要明确区分 ABI 版本。
  3. 切换版本时需清理注册的 qemu 配置。

  4. 清理已注册的 qemu

  5. 若使用 binfmt
    docker run --rm --privileged xx.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch --uninstall loongarch64
    
    注意:xx代表cr或lcr 根据abi 1.0和2.0来选择使用
  6. 若使用 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
    • 二进制:下载地址