主题
如何在AMD64服务器上构建ARM64架构的镜像
简介
在drone CI的持续集成环境中,部署不同CPU架构的runner实在太麻烦了,于是研究是否可以直接在AMD64架构的runner上直接构建ARM64镜像。
修改docker配置
修改daemon.json文件,开启expreimental功能
json
{
"experimental": true
}
修改完成后,重启docker验证修改是否生效
sh
/etc/init.d/docker restart
docker info | grep -i 'experimental'
拉取ARM64架构镜像
拉取arm平台镜像
sh
docker pull --platform arm64 alpine:3.19
查看镜像使用的平台
sh
docker inspect alpine:3.19 | grep -i 'architecture'
尝试运行arm平台的容器
sh
docker run --rm --platform arm64 -t alpine:3.19 uname -m
因CPU架构不同而返回报错如下
exec /bin/uname: exec format error
注册可支持的架构解释器
不指定CPU平台,使用register来注册可支持的架构解释器
sh
docker run --rm \
--privileged \
multiarch/qemu-user-static:register \
--reset
下载ARM64的架构解释器
sh
mkdir /opt/multiarch && \
cd /opt/multiarch && \
wget https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-aarch64-static && \
chmod +x qemu-aarch64-static
尝试用qemu-aarch64-static启动容器
sh
docker run -t \
--rm \
--platform arm64 \
-v /opt/multiarch/qemu-aarch64-static:/usr/bin/qemu-aarch64-static \
alpine:3.19 \
uname -m
构建一个ARM64镜像
准备一个docker文件
FROM alpine:3.19
ADD /opt/multiarch/qemu-aarch64-static /usr/bin/qemu-aarch64-static
运行构建命令
sh
docker build \
--platform arm64 \
-t alpine:3.19_arm64 .
查看构建出的镜像使用的平台
sh
docker inspect alpine:3.19_arm64 | grep -i 'architecture'