🚜在 X86 设备上使用 Docker 构建 ARM 镜像
2024-4-15
| 2024-4-17
0  |  阅读时长 0 分钟
type
status
password
date
slug
summary
category
URL
tags
icon
计算平台或是服务器所使用的设备一般是 ARM 架构,个人电脑使用基本上是 X86 架构。由于二者 CPU 指令集不同,尽管可以在 X86 设备上用 docker pull --platform=linux/arm64 拉取用于 ARM 设备的镜像,但无法使用 docker rundocker build 运行或是通过构建的方法修改该镜像。目前跨平台的镜像包括以下几种
  • buildx
  • qemu-user-static

buildx

利用 Docker 19.03 引入的插件 buildx[4],可以很轻松地构建多平台 Docker 镜像。

qemu-user-static

目前只支持架构为x86的宿主机

简介

  • 第一行的 uname -m 用于检测宿主机的架构,终端给出的信息表明这是一台 X86 设备。
  • 第二行命令用 Docker 运行 arm64v8/ubuntu 镜像,并运行同样的 uname -m,当然由于架构不同,无法运行该镜像,给出了 standard_init_linux.go:211: exec user process caused "exec format error" 错误。在使用 Dockerfile 构建镜像时,遇到类似的 exec /bin/bash: exec format error 错误也需要考虑是不是架构的问题。
  • 运行 qemu-user-static 镜像后,arm64v8/ubuntu 就可以成功运行了,终端给出的信息表明 arm64v8/ubuntu 是一个用于 ARM 设备的镜像。
简单来说,qemu-user-static 通过 QEMU 模拟器模拟出了 ARM 设备,从而实现在 X86 设备上运行或是构建 ARM 镜像。当然,qemu-user-static 能模拟的硬件不仅限于 ARM,对于支持的硬件,官网上有更详细的介绍。

安装

qemu-user-static 的安装和使用都可以通过以下命令完成,若本地不存在该镜像,Docker 会自动从云端拉取:
也有人会让 qemu-user-static 在后台一直运行,我嫌维护起来麻烦,就直接使用上面的命令,如果后台挂掉了,再运行一次就好。

运行镜像

通用方法

构建镜像

  • 下载资源文件
    • arm64
      ppc64le
  • dockerfile文件
    • 构建docker镜像
      • 检测:docker inspect centos_make:7.9_aarch64 | grep -i 'architecture'

      使用

      Docker 常用命令

      最后再记录几个创建环境时常用的 Docker 命令:
      Dockerfile 中记录了配置镜像的所有步骤,其他人也可以通过分享出去的 Dockerfile 构建相同的环境。而在撰写 Dockerfile 时,由于不熟悉基本镜像,一般都需要参考着终端给出的反馈来修改 Dockerfile 中的命令。这时候使用 docker run -it 就很方便,特别是运行 qemu-user-static 后,可以直接进入 ARM 镜像的交互终端中,一步步安装依赖后再保存命令。
      上面的方法在简单的镜像中尚可,有的基本镜像做了特别复杂的操作,就算使用 qemu-user-static 也无法执行 docker run,这种情况下就必须根据 docker build 给出的错误信息修改 Dockerfile 了。在对 Dockerfile Debug 时,指定 --progress=plain --no-cache 两个参数能输出更为完整的错误。
       
       

      参考

      GLM论文解读windows 数据迁移
      Loading...
      目录