x86服务器构建ARM架构docker镜像
基础环境
操作系统:openEuler 22.03 (LTS-SP2)
软件:Docker-26.1.2 、Docker Compose-v2.27.0
安装Docker
(1)配置yum源下载docker。
1 | yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
(2)安装最新版docker和docker compose。
1 | 下载依赖及docker、docker compose |
(3)修改Docker的数据目录为“/data/dockerData”,并配置docker镜像源。
1 | echo '{ |
(4)启动Docker服务,并设置为开机自启动。
1 | systemctl start docker |
使用 register
注册可支持的架构解析器
1 | docker run --rm --privileged multiarch/qemu-user-static:register --reset |
查看二进制格式的解释器是否启用,显示enabled
,即为启用。
1 | ls /proc/sys/fs/binfmt_misc/ |
拉取基础arm镜像
此处以httpd镜像为例,在x86服务器上拉取arm64架构的httpd镜像,其中--platform=arm64
指定拉取的镜像架构位arm64,--platform=amd64
则是拉取x86架构的镜像。
1 | docker pull --platform=arm64 httpd:latest |
定义Dockerfile,创建新镜像
通过使用Dockerfile创建新arm镜像的方式有两种,一种是直接下载qemu-aarch64-static
程序,在构建镜像时直接拷贝进镜像中;另一种是拉取multiarch/qemu-user-static:x86_64-aarch64
镜像,通过多阶段构建,从multiarch/qemu-user-static:x86_64-aarch64
镜像中复制 qemu-aarch64-static
程序 到 httpd
镜像中。
方式一:下载程序,直接复制
(1)在下载qemu-aarch64-static
程序时,可直接下载该程序,也可先下载其压缩包,再解压。
1 | 直接下载程序(推荐) |
(2)创建Dockerfile文件,在httpd镜像的基础上构建新镜像,qemu-aarch64-static
程序必须和Dockerfile文件在同一目录下。Dockerfile文件的具体内容如下:
1 | FROM httpd:latest |
(3)指定构建的架构,执行命令开始构建新镜像,构建完成后,查看新镜像的架构并导出为tar文件,在arm服务器上进行验证。
1 | 构建镜像 |
方式二:通过镜像多重构建复制
(1)创建Dockerfile文件,分两个阶段构建新镜像,第一阶段从 multiarch/qemu-user-static
镜像中获取qemu-aarch64-static
程序,第二阶段在httpd镜像的基础上构建新镜像,Dockerfile文件的具体内容如下:
1 | # 第一阶段:从multiarch/qemu-user-static镜像中获取qemu-aarch64-static程序 |
(2)指定构建的架构,执行命令开始构建新镜像,构建完成后,查看新镜像的架构并导出为tar文件,在arm服务器上进行验证。
1 | 构建镜像 |
扩展:通过镜像多重构建复制也可用该docker命令直接替代。
1 | docker build --rm --platform arm64 -t "httpd:1.00" -<<EOF |
在arm服务器上验证
将新的镜像tar文件导入到arm服务器上,创建新容器验证镜像是否可用及镜像中的html文件是否生效。
1 | 导入新镜像 |