type
status
password
date
slug
summary
category
URL
tags
icon
计算平台或是服务器所使用的设备一般是 ARM 架构,个人电脑使用基本上是 X86 架构。由于二者 CPU 指令集不同,尽管可以在 X86 设备上用
docker pull --platform=linux/arm64
拉取用于 ARM 设备的镜像,但无法使用 docker run
或 docker 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
两个参数能输出更为完整的错误。