在 x86 系统上高效构建 ARM 容器
挑战
为加速开发,我们想在 x86 硬件上为 AXCF2152 或 AXCF1152 创建基于 ARM 的容器。为此使用运行在普通 PC 上的基于 Debian 或 Ubuntu 的虚拟机。
我们需要模拟器
在 x86 系统运行 ARM 二进制代码需要允许此操作的模拟器。
Qemu 是少数能仿真 ARM 二进制代码并为 x86 编译的 hypervisor。只需在宿主系统安装 Qemu 并激活模拟器。为 Ubuntu 或 Debian 安装 Qemu:
apt-get update && apt-get install -y --no-install-recommends qemu-user-static binfmt-support update-binfmts --enable qemu-arm update-binfmts --display qemu-arm
使用示例
使用 Qemu 现需容器扩展,即二进制 /usr/bin/qemu-arm-static。有几种在容器中使用方式。
若扩展仅临时需且本地存在,可直接传给容器。将必要二进制挂载到容器。
docker run -it --restart always \ -v /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static \ arm32v7/debian /bin/sh
这启动容器并进入容器 Shell。现在可做所有必要更改。之后用 commit 将更改转移到镜像。
docker commit ...
容器构建时二进制必须在容器中,有两种方式。
1. 二进制已可用,Dockerhub 有现成镜像。https://hub.docker.com/u/multiarch/
2. 二进制添加到容器镜像。Dockerfile 示例:
From debian:armhf COPY qemu-arm-static /usr/bin/qemu-arm-static RUN .....
COPY 行必须直接作为 FROM 后第二条命令出现。所有构建工具均适用。
一个容器适配所有
若在 AXCF3152 安装 Qemu 扩展,可用同一容器适配两系统 (x86 和 ARM)。性能方面应充分测试。
工业技术