
我们使用docker的时候可以用这么两个场景存在疑问。第一个宿主主机是x86_64 Linux我们想要运行一个docker 容器容器里运行arm64环境。第二个宿主主机是x86_64 Linux我们想要运行一个docker 容器容器里运行同样的x86_64环境。实际上以上两种都可以但是所做的事情“”第一个“”有所限制。拉取docker 镜像arm方法# 拉取arm64 Ubuntudockerpull--platformlinux/arm64 ubuntu:22.04# 运行ARM容器dockerrun-it--platformlinux/arm64 ubuntu:22.04拉取docker 镜像x86_64方法# 拉取x86_64 Ubuntudockerpull--platformlinux/x86_64 ubuntu:22.04# 运行x86_64容器dockerrun-it--platformlinux/x86_64 ubuntu:22.04想要宿主x86运行arm镜像其一最简单方法是x86_64 宿主机直接跑 ARM64/aarch64 容器不需要完整虚拟机靠 Docker 内置 qemu 模拟# 安装跨架构模拟器dockerrun--privileged--rmtonistiigi/binfmt--installall执行后宿主机内核注册 qemu-aarch64-static 模拟器此时x86_64 机器可以直接 pull、运行 arm64/v8 标签的镜像容器内部完全是 ARM 系统环境程序、库、编译链全部 ARM 架构。我们可以进入容器后使用uname -a 查看验证。内核注册是临时的服务器重启后需要重新执行这条命令如需开机自启写入 systemd 服务或开机脚本。dockerrun 启动临时容器执行 binfmt 配置工具。--privileged必须加授予最高系统权限用于修改内核 /proc/sys/fs/binfmt_misc 二进制解析规则普通权限无法注册模拟器。--rm执行完成后自动销毁该临时容器不残留后台进程。 tonistiigi/binfmt 官方维护的轻量镜像内置全套静态编译 qemu-*-static 模拟器qemu-aarch64、qemu-arm 等。--installall 注册全部支持架构的模拟器arm64、armv7、riscv64、ppc64le、s390x、386 等 只想装 ARM 可简写--install arm64,arm。优缺点✅ 部署简单Docker 原生支持不用搭建虚拟机✅ 占用资源远低于完整 VM❌ 纯 CPU 模拟ARM 程序性能损耗大编译、密集计算会很慢❌ 不支持 ARM 硬件GPU、串口外设直通只能纯软件系统x86 上运行arm docekr容器适合使用的场景是仅需要 ARM 编译、运行 ARM 程序、测试 ARM 服务MQTT/ROS2 等不太适合做大型需要gpu等硬件基础的事情。不能直通真实 ARM 硬件只能虚拟环境模拟环境下带硬件加速的程序GPU、AI 推理会大幅卡顿部分底层内核模块、嵌入式驱动无法在 qemu 模拟环境加载运行容器后台sudodockerrun-it-d--namehumble_1 ubuntu:22.04 进入容器内部sudodockerexec-ithumble_1 /bin/bash 强制删除多个容器sudodockerrm-fhumble_1 humble_2 humble_3