Docker 运行不同架构系统镜像

351 阅读1分钟

背景

笔者本人电脑架构是Mac M1 arm64架构,云服务器是 x86_64架构,docker本地构建的镜像如何在云服务器上运行呢?

Docker 开启 experimental 功能

  • docker 运行不同架构镜像最低版本 19.03.9
  • docker 需要开启 --platform 参数来指定平台

查看是否开启 experimental 功能

docker info | grep -i 'experimental'

截屏2024-09-22 16.30.37.png 如果能看到 Experimental 字段为 true 证明你的 docker 已经开启指定 platform 功能可以忽略下面步骤

修改 daemon.json 文件

 vim /etc/docker/daemon.json   

下面的 daemon.json 文件仅供参考

{
  "registry-mirrors": ["https://docker.m.daocloud.io"],
  "experimental": true,
}

修改完成后,重启 docker 来验证

systemctl restart docker
docker info | grep -i 'experimental'

配置 qemu-user-static

qemu-user-static用于通过 QEMU 和 binfmt_misc 执行不同的多架构容器,可以利用当前操作系统来运行其它架构的一个仿真器。

下载 qemu-user-static

在服务器 /usr/src 目录下

wget https://github.com/multiarch/qemu-user-static/releases/download/v5.2.0-1/qemu-aarch64-static
chmod +x qemu-ppc64le-static

docker注册可支持的架构解释器

每次docker重启后都跑下

docker run --rm --privileged multiarch/qemu-user-static:register --reset

执行成功后,会返回类似如下的结果来表明支持的架构解析器 照片

运行不同架构的镜像

启动 arm64 镜像

x86_64架构云服务器不使用 qemu-user-static 直接运行arm64架构镜像会报错 照片 使用 qemu-user-static 启动arm64架构镜像 --platform 参数填上镜像对应的架构

docker run -d --restart=always --platform arm64 -v /usr/src/qemu-aarch64-static:/usr/bin/qemu-aarch64-static -p 3000:3000 镜像名称

照片 可以看到我们的镜像就成功启动了