有几种办法可以打包出arm64的镜像
直接在arm机器上执行编译和打包
通过qemu模拟arm环境
利用docker提供的buildx(需要启用试验性特性)
我没有arm的机器~,所以我主要试了一下下面两种方式。
借助qemu-user-static镜像打包
文档:https://github.com/multiarch/ qemu-user-static
# 开启arm平台支持
$ docker run --rm --privileged multiarch/qemu-user-static:register --reset
# copy qemu-user-static 二进制到/usr/bin 目录
$ docker build --rm -t "test/integration/ubuntu" -<<EOF
FROM multiarch/qemu-user-static:x86_64-aarch64 as qemu
FROM arm64v8/ubuntu
COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin
EOF
$ docker run --rm -t "test/integration/ubuntu" uname -m
aarch64
在运行qemu-user-static:register
镜像的时候,就通过内核中的binfmt_misc机制注入了哪些可执行文件可以被识别。
注意:需要将qemu-aarch64-static
文件 copy 到/usr/bin
目录。
❝