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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值