背景
笔者本人电脑架构是Mac M1 arm64架构,云服务器是 x86_64架构,docker本地构建的镜像如何在云服务器上运行呢?
Docker 开启 experimental 功能
- docker 运行不同架构镜像最低版本 19.03.9
- docker 需要开启 --platform 参数来指定平台
查看是否开启 experimental 功能
docker info | grep -i 'experimental'
如果能看到 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 镜像名称
可以看到我们的镜像就成功启动了