首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Java 11基本码头映像如此之大?(openjdk:11-jre-slim)

为什么Java 11基本码头映像如此之大?(openjdk:11-jre-slim)
EN

Stack Overflow用户
提问于 2018-11-19 13:24:35
回答 4查看 143.5K关注 0票数 199

Java 11被宣布为最新的LTS版本。因此,我们试图在这个Java版本的基础上启动新的服务。

但是,Java 11的基本Docker映像比Java 8的等效映像要大得多:

(我只考虑使用https://hub.docker.com/_/openjdk/,这是每个Java版本最轻量级的映像。)

更深入的挖掘揭示了以下“事物”:

代码语言:javascript
复制
- this is 60 MB larger than `alpine:3.8`
- the [Debian `sid`](https://www.debian.org/releases/sid/) versions are unstable

  • 映像中安装的openjdk-11-jre-headless包比openjdk8-jre (运行中的Docker容器)大3倍于openjdk8-jre
代码语言:javascript
复制
- `openjdk:8-jre-alpine`: 

/# du -hs /usr/lib/jvm/java-1.8-openjdk/jre/lib/ 57.5M /usr/lib/jvm/java-1.8OpenJDK/jre/lib/

代码语言:javascript
复制
- `openjdk:11-jre-slim`:

du -sh /usr/lib/jvm/java-11-OpenJDK-AMD 64/lib/179 m/usr/lib/jvm/java-11-openjdk 64/lib/

更进一步,我发现了这种沉重的“根源”--它是JDK的modules文件:

ls /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135 M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules

所以,现在出现的问题是:

  • 为什么alpine不再被用作Java11瘦图像的基本映像?
  • 为什么LTS Java映像使用不稳定的sid版本?
  • 为什么OpenJDK 11的瘦/无头/JRE包比类似的OpenJDK 8包大?
代码语言:javascript
复制
- What is this _modules_ file which brings 135 MB in OpenJDK 11?

UPD:作为应对这些挑战的解决方案,我们可以使用以下答案:Java 11应用程序作为码头映像

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-11-19 22:11:04

为什么alpine不再被用作Java11瘦图像的基本映像?

这是因为,可悲的是,目前还没有为阿尔卑斯山建立官方稳定的OpenJDK 11。

阿尔卑斯使用的是musl,而不是大多数Linuxes使用的标准glibc,这意味着JVM必须与musl兼容,以支持香草阿尔卑斯。musl OpenJDK端口是在OpenJDK的波尔托拉项目下开发的。

OpenJDK 11页概述了当前的状态:

以前在此页面上可用的Alpine构建在JDK 11 GA中已被删除。它没有准备好生产,因为它还没有经过足够彻底的测试,不足以被认为是一个GA构建。请使用早期访问的JDK 12阿尔卑斯Linux构建代替它。

阿尔卑斯目前唯一稳定的OpenJDK版本是IcedTea项目提供的7和8版本。

然而,如果你愿意考虑的不是官方的OpenJDK,那么阿祖尔祖鲁 OpenJDK提供了一个引人注目的替代方案:

  • 它支持高寒musl上的Java 11 (编写时为11.0.2版);
  • 它是一个经过认证的OpenJDK构建,使用OpenJDK TCK遵从性套件进行验证;
  • 它是免费的,开源的,并准备好了(码头枢纽)。

有关支持可用性和路线图,请参见Azul支援路线图

更新,3/6/19:到昨天为止,openjdk11在高山存储库中可用!它可以在阿尔卑斯山上被抓取,使用:

代码语言:javascript
复制
apk --no-cache add openjdk11

该包基于jdk11u OpenJDK分支,加上来自Portola项目的移植修复,由下面的按下引入。非常感谢阿尔卑斯队。

为什么LTS Java映像使用不稳定的sid版本?

这是一个公平的问题/要求。实际上,在稳定的Debian版本上提供Java 11是公开的:

https://github.com/docker-library/openjdk/issues/237

更新,26/12/18:这个问题已经解决了,现在OpenJDK 11苗条图像是基于stretch-backports 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

modules文件将JRE附带的所有模块捆绑在一起。模块的完整列表可以用java --list-modules打印。modules确实是一个非常大的文件,正如注释所指出的,它包含所有标准模块,因此非常臃肿。

但是,需要注意的一点是,它取代了rt.jartools.jar,这两种方法已被废弃,因此,当考虑到modules的大小时,与前9 OpenJDK构建相比,应该减去rt.jartools.jar的大小(它们应该占用大约80 up的总和)。

票数 206
EN

Stack Overflow用户

发布于 2020-10-15 11:44:03

如果您只考虑官方映像,并且您的目标是使用可用的较小的JRE映像,那么我建议您查看 OpenJDK openjdk:11-jre-slim-buster,它仅为69.2MB。

票数 16
EN

Stack Overflow用户

发布于 2019-07-22 11:14:23

至于07.2019,https://adoptopenjdk.net/对Java 11有正式的高山支持:

但是,模块(jmods,jlink)在组装最小应用程序时仍然需要考虑。

注意事项:苗条图像不包含某些模块(比如java.sql) --它们被明确排除在外(https://github.com/AdoptOpenJDK/openjdk-docker/blob/21b8393b9c23f94d6921a56cce27b026537c6ca2/11/jdk/alpine/slim-java.sh#L233)

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53375613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档