rad*_*tao 107 java docker alpine-linux java-11
Java 11被宣布为最新的LTS版本.因此,我们正在尝试基于此Java版本启动新服务.
但是,Java 11的基本Docker镜像远大于Java 8的等效镜像:
openjdk:8-jre-alpine:84 MB
openjdk:11-jre-slim:283 MB
(我只考虑每个Java版本的官方OpenJDK和最轻量级的图像.)
更深入的挖掘发现了以下"事物":
的openjdk:11-jre-slim图像使用基本图像debian:sid-slim.这带来了两个问题:
这比60 MB大 alpine:3.8
在Debian的sid版本是不稳定
openjdk-11-jre-headless安装在映像中的包比(运行Docker容器内部)大3倍openjdk8-jre:
openjdk:8-jre-alpine:
Run Code Online (Sandbox Code Playgroud)/ # du -hs /usr/lib/jvm/java-1.8-openjdk/jre/lib/ 57.5M /usr/lib/jvm/java-1.8-openjdk/jre/lib/
openjdk:11-jre-slim:
Run Code Online (Sandbox Code Playgroud)# du -sh /usr/lib/jvm/java-11-openjdk-amd64/lib/ 179M /usr/lib/jvm/java-11-openjdk-amd64/lib/
更深入地我发现了这种沉重的"根" - 这modules是JDK 的文件:
Run Code Online (Sandbox Code Playgroud)# ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
所以,现在问题来了:
为什么alpine不再使用Java 11 slim图像的基本映像?
为什么不稳定的sid版本用于LTS Java图像?
为什么OpenJDK 11的纤薄/无头/ JRE封装与类似的OpenJDK 8封装相比如此之大?
UPD:作为这些挑战的解决方案,人们可以使用这个答案:Java 11应用程序作为docker image
val*_*ano 135
为什么
alpine不再使用Java 11 slim图像的基本映像?
那是因为,遗憾的是,目前没有正式的OpenJDK 11版本用于Alpine.
Alpine使用musl libc,而不是大多数Linux使用的标准glibc,这意味着JVM必须与musl libc兼容才能支持vanilla Alpine.OpenJDK端口正在OpenJDK的Portola项目下开发.
OpenJDK 11页面总结了当前状态:
自JDK 11 GA起,此页面上以前提供的Alpine Linux版本已被删除.它不是生产就绪的,因为它没有经过足够的测试,不能被认为是GA版本.请使用早期访问的JDK 12 Alpine Linux版本.
目前,Alpine唯一稳定的OpenJDK版本是7和8.
但是 - 如果你愿意考虑官方OpenJDK之外的其他东西,Azul的Zulu OpenJDK提供了一个引人注目的选择:
缺点是,LTS支持仅适用于企业版,而不是社区版本的保护(参见路线图).
为什么不稳定的sid版本用于LTS Java图像?
这是一个公平的问题/要求.实际上是一个在稳定的Debian版本上提供Java 11的开放票:https:
//github.com/docker-library/openjdk/issues/237
更新,26/12/18:问题已经解决,现在OpenJDK 11苗条图像基于openjdk11最近提供的OpenJDK 11(PR链接).
为什么OpenJDK 11的纤薄/无头/ JRE封装与类似的OpenJDK 8封装相比如此之大?什么是在OpenJDK 11中带来135 MB的模块文件?
Java 9引入了模块系统,与jar文件相比,这是一种用于对包和资源进行分组的新的改进方法.Oracle的这篇文章对此功能进行了非常详细的介绍:https:
//www.oracle.com/corporate/features/understanding-java-9-modules.html
该jdk11u文件捆绑了JRE附带的所有模块.可以打印完整的模块列表stretch-backports.modules确实是一个非常大的文件,并且如评论所述,它包含所有标准模块,因此它非常臃肿.
然而有一点需要注意的是,它取代了java --list-modules,modules并且在其他方面被弃用了,因此在考虑rt.jar与9之前的OpenJDK版本相比时的大小时tools.jar,modules应该减去和的大小(它们应该占用80MB左右) .
rad*_*tao 12
至于 07.2019 https://adoptopenjdk.net/对 Java 11 有官方的 Alpine 支持:
但是,在组装最小应用程序时仍应考虑模块(jmods,jlink)。
注意:超薄图像不包含某些模块(如java.sql) - 它们被明确排除(https://github.com/AdoptOpenJDK/openjdk-docker/blob/21b8393b9c23f94d6921a56cce27b026537c6ca2/11/jdk/alpine/slim-java. )
如果您只考虑官方镜像,并且您的目标是使用可用的较小 JRE 镜像,我建议您查看只有 69.2 MB的官方 OpenJDK镜像openjdk:11-jre-slim-buster。
| 归档时间: |
|
| 查看次数: |
33250 次 |
| 最近记录: |