x86平台利用qemu-user-static实现arm64平台docker镜像的运行和构建
转载改写来源:https://www.cnblogs.com/chen2ha/p/17180287.html
docker 版本大于19.03.9才支持--platform参数,且默认没有开启,需要手动开启。
查看并开启experimental功能
查看是否开启(默认是未开启,即返回flase)
docker info | grep -i 'experimental'
修改daemon.json配置文件,增加下面的参数,开启experimental功能
Experimental: true
下面的/etc/docker/daemon.json文件仅供参考
{
"experimental": true,
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
重启docker,验证生效
systemctl restart docker
docker info | grep -i 'experimental'
拉取其它平台的镜像
查看当前的环境平台,返回x86_64
uname -m
拉取一个arm64平台的镜像
docker pull --platform arm64 debian:12
查看镜像使用的平台
docker inspect debian:12 | grep -i 'Architecture'
预期返回
"Architecture": "arm64",
注:
如果不加 --platform参数,默认拉取自己当前cpu平台的镜像
如果本地有相同tag的镜像,只是平台不同的情况下,需要注意区分tag,不然直接docker pull就会覆盖掉之前的镜像,之前的镜像tag会变为
准备qemu-user-static
注册可支持的架构解释器,不指定cpu平台,使用register来注册可支持的架构解析器
docker run --rm \
--privileged \
multiarch/qemu-user-static:register \
--reset
执行成功后,会返回类似如下的结果来表明支持的架构解析器
Setting /usr/bin/qemu-alpha-static as binfmt interpreter for alpha
Setting /usr/bin/qemu-arm-static as binfmt interpreter for arm
Setting /usr/bin/qemu-armeb-static as binfmt interpreter for armeb
Setting /usr/bin/qemu-sparc-static as binfmt interpreter for sparc
Setting /usr/bin/qemu-sparc32plus-static as binfmt interpreter for sparc32plus
Setting /usr/bin/qemu-sparc64-static as binfmt interpreter for sparc64
Setting /usr/bin/qemu-ppc-static as binfmt interpreter for ppc
Setting /usr/bin/qemu-ppc64-static as binfmt interpreter for ppc64
Setting /usr/bin/qemu-ppc64le-static as binfmt interpreter for ppc64le
Setting /usr/bin/qemu-m68k-static as binfmt interpreter for m68k
Setting /usr/bin/qemu-mips-static as binfmt interpreter for mips
Setting /usr/bin/qemu-mipsel-static as binfmt interpreter for mipsel
Setting /usr/bin/qemu-mipsn32-static as binfmt interpreter for mipsn32
Setting /usr/bin/qemu-mipsn32el-static as binfmt interpreter for mipsn32el
Setting /usr/bin/qemu-mips64-static as binfmt interpreter for mips64
Setting /usr/bin/qemu-mips64el-static as binfmt interpreter for mips64el
Setting /usr/bin/qemu-sh4-static as binfmt interpreter for sh4
Setting /usr/bin/qemu-sh4eb-static as binfmt interpreter for sh4eb
Setting /usr/bin/qemu-s390x-static as binfmt interpreter for s390x
Setting /usr/bin/qemu-aarch64-static as binfmt interpreter for aarch64
Setting /usr/bin/qemu-aarch64_be-static as binfmt interpreter for aarch64_be
Setting /usr/bin/qemu-hppa-static as binfmt interpreter for hppa
Setting /usr/bin/qemu-riscv32-static as binfmt interpreter for riscv32
Setting /usr/bin/qemu-riscv64-static as binfmt interpreter for riscv64
Setting /usr/bin/qemu-xtensa-static as binfmt interpreter for xtensa
Setting /usr/bin/qemu-xtensaeb-static as binfmt interpreter for xtensaeb
Setting /usr/bin/qemu-microblaze-static as binfmt interpreter for microblaze
Setting /usr/bin/qemu-microblazeel-static as binfmt interpreter for microblazeel
Setting /usr/bin/qemu-or1k-static as binfmt interpreter for or1k
Setting /usr/bin/qemu-hexagon-static as binfmt interpreter for hexagon
增加arm64镜像的支持
下载qemu-aarch64-static (地址:https://github.com/multiarch/qemu-user-static/releases )
wget https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-aarch64-static \
&& chmod +x qemu-aarch64-static \
&& mv qemu-aarch64-static /usr/bin/
启动容器时将qemu-aarch64-static带入到容器内
注:qemu-aarch64-static二进制文件的路径,可以自定义路径,只需要带入到容器内的/usr/bin目录下
docker run -t \
--rm \
--platform arm64 \
-v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static \
debian:12 \
uname -m
正常情况下,返回 aarch64 后容器就会被销毁了(因为加了 --rm 参数)
后台运行arm64容器
docker run -d \
--rm \
--platform arm64 \
-v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static \
--name debian12 \
debian:12 \
sleep 3600
进入容器,容器内的命令均为aarch64的
docker exec -it debian12 sh
注:跨平台运行镜像,不能保证完全兼容运行。
创建一个arm64镜像
- 准备一个Dockerfile
- 需要将qemu-aarch64-static带入到容器内的/usr/bin目录下可以实现构建
Dockerfile
FROM scratch
ADD base_sys.tar.gz /
ADD docker_entrypoint.sh /usr/local/bin/
ADD qemu-aarch64-static /usr/bin/
RUN groupadd -g 1000 gbasedbt && useradd -u 1000 -g gbasedbt -d /home/gbase -m -s /bin/bash gbasedbt
ADD v8.8_3513x13_csdk_arm64.tar.gz /
EXPOSE 9088
ENTRYPOINT ["docker_entrypoint.sh"]
开始构建
docker build \
--platform arm64 \
-t liaosnet/gbase8s:v8.8_3513x13_csdk_arm64 .
构建完成后,可以使用下面的命令验证容器内的平台是否是 arm64
docker inspect liaosnet/gbase8s:v8.8_3513x13_csdk_arm64 | grep -i 'Architecture'
- 上一篇: 配置CentOS 7本地机房yum源
- 下一篇: 没有了