中美摩擦升级,国产替代成为了一个绕不开的点,本文将会基于ubuntu16.04的为编译环境,来构建生成arm64版本的镜像文件:
构建过程分为两部分:
- 编译环境准备,即安装qemu模拟arm64的环境:
apt-get update && apt-get install -y --no-install-recommends qemu-user-static binfmt-support
检查安装情况是否完整:
$ cd /usr/bin/qemu-
qemu-aarch64-static qemu-or32-static
qemu-alpha-static qemu-ppc64abi32-static
qemu-armeb-static qemu-ppc64le-static
qemu-arm-static qemu-ppc64-static
qemu-cris-static qemu-ppc-static
qemu-i386-static qemu-s390x-static
qemu-m68k-static qemu-sh4eb-static
qemu-microblazeel-static qemu-sh4-static
qemu-microblaze-static qemu-sparc32plus-static
qemu-mips64el-static qemu-sparc64-static
qemu-mips64-static qemu-sparc-static
qemu-mipsel-static qemu-tilegx-static
qemu-mipsn32el-static qemu-unicore32-static
qemu-mipsn32-static qemu-x86_64-static
qemu-mips-static
如上所示代表安装成功,下面检查一下是否启用了相关的架构模拟,出现了下面第二行的warning代表是已经开启,到此编译环境的设置已经完成:
$ update-binfmts --enable qemu-aarch64
update-binfmts: warning: qemu-aarch64 already enabled in kernel.
- Dockerfile的编写:
FROM multiarch/qemu-user-static:x86_64-aarch64 as qemu
FROM arm64v8/alpine:3.12
COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin
ENTRYPOINT ["/entrypoint.sh"]
到这里我们的构建arm64架构下的镜像就完成了。
当然上面的dockerfile是最简单的一种方式,将 qemu-aarch64-static 拷贝到你要生成的镜像里,下面提供了另外两种方式:
# 也可以通过文件挂载的方式,将宿主机上的qemu-aarch64-static 拷贝到你的镜像里;
cp /usr/bin/qemu-arm-static /your/working/dir
# Dockerfile 里加上这句
COPY qemu-arm-static /usr/bin/qemu-arm-static
# 还可以通过下载的方式搞到镜像里,这种方式需要你在编译的镜像里下载,再拷贝到自己的镜像里,Dockerfile如下:
FROM golang:1.13.0 as builder
WORKDIR /home
RUN curl -SL https://github.com/balena-io/qemu/releases/download/v4.0.0%2Bbalena2/qemu-4.0.0.balena2-aarch64.tar.gz | tar zxvf - -C . && mv qemu-4.0.0+balena2-aarch64/qemu-aarch64-static .
FROM arm64v8/alpine:3.12
COPY --from=builder /home/qemu-aarch64-static /usr/bin/qemu-aarch64-static
ENTRYPOINT ["/entrypoint.sh"]
网友评论