记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

X86机器运行ARM64 Docker

X86机器运行ARM64 Docker
Github:https://github.com/multiarch/qemu-user-static
Dockerhub:https://hub.docker.com/r/multiarch/qemu-user-static
Github:https://github.com/docker-library/official-images
镜像地址:Debian Ubuntu Alpine Fedora Almalinux Rockylinux Centos Opensuse
其他镜像:https://hub.docker.com/u/arm64v8
multiarch/qemu-user-static 是使能 QEMU 执行不同的多架构容器,以下是 Docker 的示例。
XML/HTML代码
  1. # 查看硬件构架
  2. $ uname -m
  3. x86_64
  4. # 运行arm64v8版本的ubuntu系统,查看构架(错误提示)
  5. $ docker run --rm -t --platform arm64 arm64v8/ubuntu uname -m
  6. standard_init_linux.go:211: exec user process caused "exec format error"
  7. # 运行qemu多构架支持
  8. $ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  9. # 查看arm64v8版本的ubuntu系统,查看构架(正常显示aarch64)
  10. $ docker run --rm -t --platform arm64 arm64v8/ubuntu uname -m
  11. aarch64
它适用于许多架构和操作系统容器映像,以下为各个版本硬件构架演示。
XML/HTML代码
  1. $ docker run --rm -t --platform arm arm32v6/alpine uname -m
  2. armv7l
  3. $ docker run --rm -t --platform ppc64le ppc64le/debian uname -m
  4. ppc64le
  5. $ docker run --rm -t --platform s390x s390x/ubuntu uname -m
  6. s390x
  7. $ docker run --rm -t --platform arm64 arm64v8/fedora uname -m
  8. aarch64
  9. $ docker run --rm -t --platform arm arm32v7/centos uname -m
  10. armv7l
  11. $ docker run --rm -t --platform ppc64le ppc64le/busybox uname -m
  12. ppc64le
  13. $ docker run --rm -t --platform 386 i386/ubuntu uname -m
  14. x86_64
  15. #Podman有效
  16. $ sudo podman run --rm --privileged multiarch/qemu-user-static --reset -p yes  
  17. $ podman run --rm -t arm64v8/fedora uname -m  
  18. aarch64  
常见硬件构架镜像地址:
ARMv6 32-bit  ARMv7 32-bit  ARMv8 64-bit  Linux x86-64  Windows x86-64
ARMv5 32-bit  IBM POWER8  IBM z Systems  MIPS64 LE  RISC-V 64-bit  x86/i686 
简单创建一个arm64v8的Debian、Ubuntu、Centos、Alpine
XML/HTML代码
  1. docker run --name multiarch --privileged --restart=always multiarch/qemu-user-static --reset -p yes
XML/HTML代码
  1. #Debian
  2. docker run -tid --name debian --privileged=true --platform arm64 arm64v8/debian
  3. docker exec -it debian  /bin/bash
  4. #Ubuntu
  5. docker run -tid --name ubuntu --privileged=true --platform arm64 arm64v8/ubuntu
  6. docker exec -it ubuntu  /bin/bash
  7. #Centos
  8. docker run -tid --name centos --privileged=true --platform arm64 arm64v8/centos
  9. docker exec -it centos  /bin/bash
  10. #Alpine
  11. docker run -tid --name alpine --privileged=true --platform arm64 arm64v8/alpine
  12. docker exec -it alpine  /bin/sh
此项目可以让Docker支持不同的硬件平台,可以测试编译程序,非常方便,具体使用可以自行修改。
注意:新版本docker需要使用 --platform arm64 指定镜像平台,否则只能拉取默认平台版本。另以上操作在PVE平台可以直接使用,无需安装任何组件和操作,其他系统则需要复杂设置才能使用。
最新更新:
官方傻瓜命令(强烈推荐使用
XML/HTML代码
  1. docker run --privileged --rm tonistiigi/binfmt --install all
系统要求:
Linux 内核版本 4.8 或更高版本
binfmt-support2.1.7 或更高版本
原理:QEMU 二进制文件必须静态编译并使用 fix_binary标志注册,使用 tonistiigi/binfmt 映像安装 QEMU 并通过单个命令在主机上注册可执行文件类型,将安装 QEMU 二进制文件并将其注册到 binfmt_misc,从而使 QEMU 能够执行非本地文件格式进行模拟。
手动设置方法(原理)
查看主机支持的CPU构架
XML/HTML代码
  1. mount | grep binfmt_misc
  2. ls /proc/sys/fs/binfmt_misc/
Docker运行qemu-user-static增加CPU支持
XML/HTML代码
  1. docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
验证是否成功1
XML/HTML代码
  1. ls /proc/sys/fs/binfmt_misc/
验证是否成功(新版docker必须指定平台,此命令不适用)
XML/HTML代码
  1. docker run --rm -t arm64v8/alpine uname -m
由于主机 CPU 是 AMD,因此会出现此警告,可以通过向 docker 指定平台来消除此警告:
XML/HTML代码
  1. docker run --rm -t --platform arm64 arm64v8/alpine uname -m
特别提醒:以上方法均为物理机或者虚拟机测试通过,至于lxc、lxd之类容器化的环境是无法使用的。
如果系统是Alpine需要执行按照以下命令执行
Alpine安装常用组件
XML/HTML代码
  1. apk add htop nload curl wget tar ncdu git bash net-tools sudo
Docker一键安装命令
XML/HTML代码
  1. bash <(curl -sL https://iii80.com/sh/docker.sh)
Docker管理面板Portainer单独安装
XML/HTML代码
  1. docker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data 6053537/portainer-ce
  2. #163镜像安装
  3. docker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock hub-mirror.c.163.com/6053537/portainer-ce
  4. docker restart portainer
多平台支持(关键命令)
XML/HTML代码
  1. apk add qemu-x86_64 qemu-i386 qemu-openrc openrc
  2. rc-update add qemu-binfmt default
  3. rc-service qemu-binfmt start
  4. docker run --privileged --rm tonistiigi/binfmt --install all
通过上面命令可以实现Docker多平台支持。

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):