ARM64架构下,OpenJDK的官方Docker镜像为何没有8版本

博弈论实践
• 阅读 2441

为什么需要ARM64架构的OpenJDK8的Docker镜像

对现有的Java应用,之前一直运行在x86处理器环境下,编译和运行都是JDK8,如今在树莓派的Docker环境运行(也可能是其他ARM环境,如华为的泰山ARM服务器),需要JDK8镜像作为基础镜像。

OpenJDK的官方Dockerfile

去OpenJDK的docker镜像官网查找找,地址是:https://hub.docker.com/r/arm6... ,如下图,只有JDK11的镜像:
ARM64架构下,OpenJDK的官方Docker镜像为何没有8版本

为啥没有OpenJDK8的镜像

心中略有不甘,想搞清楚为何没有,来探索一下;

  1. 打开OpenJDK8的官方GitHub,去看镜像的制作脚本Dockerfile的源码,地址是:https://github.com/docker-lib... ,注意下图的内容:

ARM64架构下,OpenJDK的官方Docker镜像为何没有8版本

  1. 从上图的分析我们了解到OpenJDK8镜像制作过程:先获取当前宿主机的处理器架构,执行命令是<font color="blue">$(dpkg --print-architecture)</font>,在树莓派上执行此命令试试,如下,可见得到了<font color="blue">$(dpkg --print-architecture)</font>:
root@raspbian:~# echo $(dpkg --print-architecture)
arm64
  1. 看上图红框3中的代码,如果处理器架构是<font color="blue">arm64</font>,那么变量<font color="blue">upstreamArch</font>就等于<font color="blue">aarch64</font>;
  2. 看上图红框4中的代码,下载OpenJDK包的地址是<font color="blue">&dollar;{JAVA_BASE_URL}${upstreamArch}_linux_${JAVA_URL_VERSION}.tar.gz</font>,这里面JAVA_BASE_URL、upstreamArch、JAVA_URL_VERSION的值都已经确定了,于是真实的地址就是:
https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u222-b10/OpenJDK8U-jdk_aarch64_linux_8u222b10.tar.gz
  1. 在浏览器输入上述地址试试,发现浏览器返回的是404错误,也就是说此地址无效;
  2. 将上述地址中的<font color="blue">aarch64</font>替换成<font color="blue">x64</font>,看看X86处理机架构下有没有OpenJDK8的下载包,新地址是:https://github.com/AdoptOpenJ... ,此地址可以顺利下载;
  3. 来看看OpenJDK官方为JDK8版本提供了哪些下载包,地址是:https://github.com/AdoptOpenJ... ,如下图,清一色的x86架构:

ARM64架构下,OpenJDK的官方Docker镜像为何没有8版本

结论

OpenJDK官方镜像的制作原理,是依据宿主机CPU架构去官方下载对应的OpenJDK安装包,再做成镜像,目前OpenJKD8的安装包并没有提供ARM版本,因此官方没有提供ARM版本的OpenJDK8的Docker镜像;

解决之道

现状是OpenJDK官方在ARM64架构不提供8版本的官方Docker镜像,解决此问题的思路有两个(个人观点,欢迎探讨)

  1. 自己编译一个8版本的OpenJDK安装包,以此来做Docker镜像;
  2. Oracle提供了ARM版本的JDKD安装包,以此包来做Docker镜像;
  3. 用OpenJDK的11版本,但是11和8的差异要自行处理;

对于第一种方式,自己编译8版本的OpenJDK,难度太大(对我自己而言),因为编译OpenJDK需要低版本的OpenJDK作为编译工具,也就是说我要找到ARM版本的OpenJDK7,才能编译ARM版本的OpenJDK8,因此我觉得这样做的难度太大...

对于第二种和第三种,后续的章节我们一起来实战吧;

欢迎关注公众号:程序员欣宸

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
ARM64架构下,OpenJDK的官方Docker镜像为何没有8版本
为什么需要ARM64架构的OpenJDK8的Docker镜像对现有的Java应用,之前一直运行在x86处理器环境下,编译和运行都是JDK8,如今在树莓派的Docker环境运行(也可能是其他ARM环境,如华为的泰山ARM服务器),需要JDK8镜像作为基础镜像。OpenJDK的官方Dockerfile去OpenJDK的docker镜像
Stella981 Stella981
3年前
Docker + selenium + jenkins 并行跑自动化测试
背景目标:使用docker做UI自动化测试并在Jenkins运行调试环境:MocOS运行环境:Linuxubuntudocker涉及工具:docker,selenium,unittest,jenkins基本思路找一个适合做自动化的docker镜像,使用seleniumgrid远程执行selenium。镜像
Stella981 Stella981
3年前
Docker & pure
项目需要进行升级服务,现在需要基于centos7使用docker来快速打架一个FTP环境来方便本地文件上传。本次使用的是pureftpddocker镜像,有关镜像使用的详细信息,本人是从https://hub.docker.com/r/stilliard/pureftpd/上获取的。下面简单记录一下FTP服务器的搭建过程:1、下载镜
Stella981 Stella981
3年前
Docker:dockerfile构建php项目 [八]
一、把项目封装成docker镜像的步骤把项目封装成docker镜像的步骤:1、先运行一个基础容器,手动制作docker镜像2、编写dockerfile,构建镜像3、测试运行二、dockerfile常用指令参考1、dockerfile常用指令:
Stella981 Stella981
3年前
Docker学习笔记
docker通过带环境安装来解决开发和运维之间的鸿沟问题,属于云计算方面的技术。也就是说安装的时候把原始环境一模一样地复制过来,开发人员利用Docker来消除协作代码时,“在我的机器上可以正常工作啊"的问题。一次构建,处处运行。dev本地测试完毕后,打包递交docker镜像,而运维则只装一个docker作为鲸鱼,将各个镜像放到鲸鱼背上作为独立的集装箱
Stella981 Stella981
3年前
Framework打包
iOSapp需要在许多不同的CPU架构下运行:arm7:在最老的支持iOS7的设备上使用arm7s:在iPhone5和5C上使用arm64:运行于iPhone5S的64位ARM处理器上i386:32位模拟器上使用x86\_64:64为模拟器上使用
Stella981 Stella981
3年前
ARM架构下的Docker环境,OpenJDK官方没有8版本镜像,如何完美解决?
为什么需要ARM架构下的OpenJDK8的Docker镜像?对现有的Java应用,之前一直运行在x86处理器环境下,编译和运行都是JDK8,如今在树莓派的Docker环境运行(或者其他ARM架构电脑,例如华为泰山服务器),需要JDK8镜像作为基础镜像。现在有什么问题?在《ARM64架构下,OpenJDK的官方Docker镜像为何
Stella981 Stella981
3年前
Docker容器构建过程的安全性分析
来源:嘶吼专业版ID:Pro4houDevOps概念的流行跟近些年微服务架构的兴起有很大关系,DevOps是Dev(Development)和Ops(Operations)的结合,Dev负责开发,Ops负责部署上线,Docker出现之前,公司需要搭建一个数据库环境,有了Docker之后,只需在一些开源的基础镜像上构建出公司自己的镜像即可。因此目前
Stella981 Stella981
3年前
Docker 镜像 容器 仓库
Docker包括三个基本概念镜像(Image)容器(Container)仓库(Repository)Docker镜像Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其
Stella981 Stella981
3年前
Docker镜像优化:从1.16GB到22.4MB
Docker是一个供软件开发人员和系统管理员使用容器构建、运行和与分享应用程序的平台。容器是在独立环境中运行的进程,它运行在自己的文件系统上,该文件系统是使用docker镜像构建的。镜像中包含运行应用程序所需的一切(编译后的代码、依赖项、库等等)。镜像使用Dockerfile文件定义。术语dockerization或containeriz
一种基于alpine、支持ARM架构64位的镜像构建方法及其构建系统
一种基于alpine、支持ARM架构64位的镜像构建方法及其构建系统,包括以下步骤:步骤1:准备arm64位基础镜像包
博弈论实践
博弈论实践
Lv1
十年一觉扬州梦,赢得青楼薄幸名。
文章
5
粉丝
0
获赞
0