AMD服务器硬刚ARM容器:Buildx + QEMU 跨架构“模拟”实战
背景及实验环境
背景:
项目中amd架构服务器无法运行arm架构容器,需要在内核层面注册“翻译官”,能自动调用QEMU进行指令翻译,从而正常运行arm架构容器。
例如当服务器是amd架构时,基于该架构构建的镜像打包到arm架构服务器上创建容器时报错:
WARNING: The requested image’s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
实验环境:
要求Ubuntu 24.04及更高版本、现场26.04版本
要求Docker版本不低于19.03,现场29.7.2版本
安装Docker
更新软件包并安装依赖
sudo apt update
sudo apt install -y ca-certificates curl


添加Docker官方GPG密钥和软件源
# 创建存放密钥的目录
sudo install -m 0755 -d /etc/apt/keyrings
# 下载并安装GPG密钥
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加Docker软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装Docker引擎及相关插件
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

配置Docker镜像加速器(提升下载速度)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn"
]
}
EOF
启动Docker服务并验证安装
sudo systemctl restart docker
sudo systemctl enable docker
sudo docker run hello-world
看到“Hello from Docker!”即表示安装成功。
开启Docker的跨平台“翻译”能力
安装QEMU用户态模拟器和binfmt支持
sudo apt install -y qemu-user-binfmt

验证跨平台执行环境
sudo docker run --rm --platform linux/arm64 alpine uname -m
终端输出 aarch64,表示成功地在AMD机器上运行了一个ARM容器。

使用Buildx构建ARM镜像
编写Dockerfile
# 使用官方 CentOS 7 作为基础镜像
FROM centos:7
# 设置维护者信息
LABEL maintainer="your-email@example.com"
# 设置工作目录
WORKDIR /app
# 复制你的应用程序文件到镜像中
COPY . /app
# 指定容器启动时执行的命令
CMD ["sleep", "3000"]
构建ARM镜像
# 构建并加载到本地镜像库
sudo docker buildx build --platform linux/arm64 -t your-centos7-arm64:latest .
# 基于镜像模板创建运行容器,如果在amd架构服务器下注意添加--platform linux/arm64,使用-d后台运行,镜像后不带参数以免CMD被覆盖
sudo docker run -d --platform linux/arm64 your-centos7-arm64:latest
# 查看容器运行中则正常
sudo docker ps


245

被折叠的 条评论
为什么被折叠?



