在x86环境下模拟arm环境制作docker容器

简介:
x86架构系统docker+qemu打包arm环境
VMware虚拟机下x86架构ubuntu64位虚拟机docker+qemu运行arm架构容器搭建arm镜像

一、安装ubuntu、docker

这里安装的是ubuntu20.04.2
安装ubuntu和docker
安装ubuntu
如何在Ubuntu上安装并使用Docker
如何在 Ubuntu 22.04 LTS 中安装 Docker 和 Docker Compose
虚拟机中Ubuntu与主机共享文件夹

二、qemu注册脚本,让docker支持多架构

可以在系统里测试,当前是x86架构,并且不支持arm架构的虚拟机。

1.先查询下本机架构,并测试下能否启动其他架构镜像

uname -m # 显示主机架构
#x86_64

docker run --rm -t arm64v8/ubuntu uname -m # 在x86_64上运行为aarch64编写的可执行文件
#standard_init_linux.go:211: exec user process caused "exec format error"

2.将qemu注入docker

这里是一个github项目,脚本自动实现docker+qemu,实现多架构

sudo apt-get install qemu binfmt-support qemu-user-static # 安装qemu包
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes # 这一步将执行注册脚本(docker+qemu功能)

docker run --rm -t arm64v8/ubuntu uname -m # 测试仿真环境
#aarch64

完成以上步骤即可使用docker启动arm架构镜像。

这里是使用到以下的docker+qemu安装教程,感谢思叶提供经验
Running and Building ARM Docker Containers on x86 | Stereolabs
GitHub - multiarch/qemu-user-static

三、拉取指定架构的镜像

需要在docker pull后面添加参数--platform arm64

1.需要docker开启实验属性

修改docker配置文件,并重载,开启docker实验属性。为配置文件/etc/docker/daemon.json添加"experimental": true

修改后的配置文件类似下面:

{
    
    
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "max-concurrent-downloads": 10,
  "max-concurrent-uploads": 10,
  "experimental": true,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    
    
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/var/lib/docker"
}

修改完成后,使用以下命令重启服务:

systemctl daemon-reload
systemctl restart docker

2.拉取指定架构的镜像

docker pull时指定参数,即可完成指定架构镜像的拉取。如拉取arm64架构的 alpine镜像。

# docker pull --platform arm64 [镜像名称/ID]
docker pull --platform arm64 alpine

通过以下命令,可以确定其架构信息:

docker inspect alpine | grep Architecture

> "Architecture": "arm64",

也可仿真测试

docker run --rm -t arm64v8/ubuntu uname -m

> aarch64

查询主机的架构,是x86_64

arch

> x86_64

docker常用命令便查

其他

出现问题

  1. #standard_init_linux. go:211: exec user process caused “exec format error”
    这里有人在安完了,还出现这个错误。当事人说每次重启都需要重新运行下上面脚本

  2. “experimental”: true
    有一个错误忘了是啥了,需要docker开启实验属性。
    开启实验属性
    https://blog.csdn.net/weixin_43403660/article/details/125974212

  3. WARNING:`gateway4` has been deprecated, use default routes instead…
    Ubuntu 报错 WARNING:`gateway4` has been deprecated, use default routes instead… 解决方案
    https://blog.csdn.net/yilovexing/article/details/126424086

  4. VMware上Ubuntu联网(NAT方式)
    https://blog.csdn.net/xuqingda/article/details/124033331

更多方案:
1、 windows系统下qemu模拟arm架构
Windows 10 使用QEMU安装arm架构系统,并联网
https://www.bilibili.com/video/BV1mt4y1M7X1/
问题:最后因为多核运行不起来和无法导出原因放弃(实际上可以实现)

2、 使用docker buildx构建多架构环境
Docker构建多架构支持镜像 | docker buildx命令的使用
https://www.bilibili.com/video/BV1se4y127E2/

参考博客

Running and Building ARM Docker Containers on x86 | Stereolabs
GitHub - multiarch/qemu-user-static
如何使用 docker pull 拉取指定架构的容器镜像

猜你喜欢

转载自blog.csdn.net/aiaidexiaji/article/details/130790364
今日推荐