searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

一种在x86架构主机上制作arm架构Docker镜像的方法

2023-10-11 11:25:35
125
0
本文主要介绍如何在x86机器上模拟arm架构指令来构建arm架构的镜像。
 

问题

通常,我们在x86架构的主机上制作x86架构的Docker镜像,在arm架构主机上制作arm架构的Docker镜像。这样会存在一个问题,非常浪费资源,如果需要制作什么架构的Docker镜像,就需要什么架构的主机。那么可以在最流行的x86架构主机上制作其它架构的Docker镜像吗?答案是肯定的,下面将详细描述在x86架构主机上制作arm架构Docker镜像的详细方案。

实现思想


因为x86架构的主机上无法执行arm架构上的指令,所以需要一个模拟仿真软件能把arm架构上的指令解释为x86架构主机上能够执行的指令。这里选择了multiarch/qemu-user-static工具来实现在x86主机上模拟arm环境。

制作arm架构Docker镜像


这里为了更加形象和具体的阐述制作arm架构Docker镜像的过程,就是基于centos的jdk镜像为例讲述。

首先,需要在x86架构主机上执行如下命令,开启x86架构环境上仿真arm架构环境。
 
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes


其次,下载arm架构版的oracle jdk或者openjdk,在参考链接章节可以找到下载地址。

再次,编写Dockerfile内容,如下
 
FROM centos:centos7.9.2009@sha256:864a7acea4a5e8fa7a4d83720fbcbadbe38b183f46f3600e04a3f8c1d961ed87

# add jdk
ADD jdk-8u371-linux-aarch64.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_371
ENV PATH ${PATH}:${JAVA_HOME}/bin
 
这里需要注意的是dockerhub上centos的官方镜像已经下架了arm架构的镜像。

然后,执行镜像构建命令
 
docker build localhost/arm64v8-jdk:8u371 .
 
这里需要注意的是jdk-8u371-linux-aarch64.tar.gz文件需要和Dockerfile文件同目录。

最后,验证是否arm架构镜像制作是否成功。
 
# 进入容器里面
docker run -it localhost/arm64v8-jdk:8u371 /bin/bash

# 查看架构
uname -m

# 查看是否有javac命令
javac

# 查看是否有java命令
java
0条评论
0 / 1000