前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ARM64架构下,OpenJDK的官方Docker镜像为何没有8版本?

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

作者头像
程序员欣宸
发布2019-10-22 12:06:37
1.3K0
发布2019-10-22 12:06:37
举报
文章被收录于专栏:实战docker

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/boling_cavalry/article/details/101908575

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

对现有的Java应用,之前一直运行在x86处理器环境下,编译和运行都是JDK8,如今在树莓派的Docker环境运行,需要JDK8镜像作为基础镜像。

OpenJDK的官方Dockerfile

去OpenJDK的docker镜像官网查找找,地址是:https://hub.docker.com/r/arm64v8/openjdk ,如下图,只有JDK11的镜像:

在这里插入图片描述
在这里插入图片描述

为啥没有OpenJDK8的镜像

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

  1. 打开OpenJDK8的官方GitHub,去看镜像的制作脚本Dockerfile的源码,地址是:https://github.com/docker-library/openjdk/blob/master/8/jdk/Dockerfile ,注意下图的内容:
在这里插入图片描述
在这里插入图片描述
  1. 从上图的分析我们了解到OpenJDK8镜像制作过程:先获取当前宿主机的处理器架构,执行命令是$(dpkg --print-architecture),在树莓派上执行此命令试试,如下,可见得到了$(dpkg --print-architecture):
代码语言:javascript
复制
root@raspbian:~# echo $(dpkg --print-architecture)
arm64
  1. 看上图红框3中的代码,如果处理器架构是arm64,那么变量upstreamArch就等于aarch64;
  2. 看上图红框4中的代码,下载OpenJDK包的地址是${JAVA_BASE_URL}KaTeX parse error: Expected group after '_' at position 21: …reamArch}_linux_̲{JAVA_URL_VERSION}.tar.gz,这里面JAVA_BASE_URL、upstreamArch、JAVA_URL_VERSION的值都已经确定了,于是真实的地址就是:
代码语言:javascript
复制
https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u222-b10/OpenJDK8U-jdk_aarch64_linux_8u222b10.tar.gz
  1. 在浏览器输入上述地址试试,发现浏览器返回的是404错误,也就是说此地址无效;
  2. 将上述地址中的aarch64替换成x64,看看X86处理机架构下有没有OpenJDK8的下载包,新地址是:https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u222-b10/OpenJDK8U-jdk_x64_linux_8u222b10.tar.gz ,此地址可以顺利下载;
  3. 来看看OpenJDK官方为JDK8版本提供了哪些下载包,地址是:https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases ,如下图,清一色的x86架构:
在这里插入图片描述
在这里插入图片描述

结论

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,因此我觉得这样做的难度太大…

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么需要ARM64架构的OpenJDK8的Docker镜像
  • OpenJDK的官方Dockerfile
  • 为啥没有OpenJDK8的镜像
  • 结论
  • 解决之道
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档