【docker交叉编译】在x86上编译arm镜像

前提:已经安装好docker环境

先确认自己的电脑架构(正常都是amd64即x86架构)

uname -m

【docker交叉编译】在x86上编译arm镜像_第1张图片

 这时我们直接运行arm架构的镜像会报错

WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested

此时需要执行下面两个命令

sudo apt-get install qemu binfmt-support qemu-user-static
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

这里是安装qemu-user-static来实现的

qemu-user-static是一个用于利用当前操作系统来运行其它架构的一个仿真器,这个github项目可以通过x86的机器编译出其它各个架构的docker镜像。

  项目地址qemu-user-static    项目地址

第二个命令是注册虚拟机

 

验证: 以  arm64v8/ubuntu:last  为例

docker run --rm -ti --platform linux/arm64/v8 arm64v8/ubuntu 

注意在创建容器时要加上--platform linux/arm64/v8

进入容器后,通过命令查看当前ubuntu架构

查看容器版本号

不能通过uname -a查看

应该通过cat /etc/issue 查看

arch 查看架构

正确的姿势:

cat /etc/issue  或cat /etc/lsb-release

【docker交叉编译】在x86上编译arm镜像_第2张图片

 

 

 

错误的姿势:

cat /proc/version 或 uname -a ,这样查到的是宿主机的系统。

容器内的应用直接运行在宿主机的内核之上, 容器并没有自己的内核, 也不需要虚拟硬件, 相当轻量化每个容器间是相互隔离, 每个容器内都要一个属于自己的独立文件系统, 独立的进程空间, 网络空间, 用户空间等, 所以在同一个宿主机上的多个容器之间彼此不会相互影响

你可能感兴趣的:(Linux运维,docker,arm,linux)