最佳答案
宣布Java 11是最新的LTS版本。因此,我们正在尝试启动基于此Java版本的新服务。
然而,Java 11的基础Docker映像比Java 8的相应映像大得多:
openjdk:8-jre-alpine
:84 MB
openjdk:11-jre-slim
:283MB
(我只考虑每个Java版本的官方OpenJDK和最轻量级的映像。)
更深的挖掘发现了以下“东西”:
openjdk:11-jre-slim
图像使用基本图像debian:sid-slim
。这带来了两个问题:
这比alpine:3.8
大60 MB
Debiansid
版本不稳定
的openjdk-11-jre-headless
包3倍大,而不是openjdk8-jre
(在运行的Docker容器中):
openjdk:8-jre-alpine
:
/ # 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
:
# du -sh /usr/lib/jvm/java-11-openjdk-amd64/lib/ 179M /usr/lib/jvm/java-11-openjdk-amd64/lib/
更深入地说,我发现了这个负担的“根源”——它是JDK的modules
文件:
# ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
所以,现在的问题是:
为什么alpine
不再用作Java11Slim映像的基础映像?
为什么将不稳定的Sid版本用于LTS Java映像?
为什么OpenJDK 11的Slim/Headless/JRE包与类似的OpenJDK 8包相比如此之大?
UPD:作为这些挑战的解决方案,可以使用这个答案:作为Docker映像的Java 11应用程序