简介:
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
其他
出现问题
-
#standard_init_linux. go:211: exec user process caused “exec format error”
这里有人在安完了,还出现这个错误。当事人说每次重启都需要重新运行下上面脚本 -
“experimental”: true
有一个错误忘了是啥了,需要docker开启实验属性。
开启实验属性
https://blog.youkuaiyun.com/weixin_43403660/article/details/125974212 -
WARNING:`gateway4` has been deprecated, use default routes instead…
Ubuntu 报错 WARNING:`gateway4` has been deprecated, use default routes instead… 解决方案
https://blog.youkuaiyun.com/yilovexing/article/details/126424086 -
VMware上Ubuntu联网(NAT方式)
https://blog.youkuaiyun.com/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 拉取指定架构的容器镜像