Java 11 wird als neueste LTS-Version angekündigt. Wir versuchen also, neue Dienste basierend auf dieser Java-Version zu starten.
Das Basis-Docker-Image für Java 11 ist jedoch viel größer als das Äquivalent für Java 8:
openjdk:8-jre-alpine
: 84 MBopenjdk:11-jre-slim
: 283 MB
(Ich betrachte nur das offizielle OpenJDK und die leichtesten Images für jede Java-Version.)
Beim tieferen Graben wurden die folgenden "Dinge" entdeckt:
Das
openjdk:11-jre-slim
Bild verwendet das Basisbilddebian:sid-slim
. Dies bringt 2 Probleme mit sich:das ist 60 MB größer als
alpine:3.8
Die Debian-
sid
Versionen sind instabil
Das
openjdk-11-jre-headless
im Image installierte Paket ist dreimal größer alsopenjdk8-jre
(innerhalb des laufenden Docker-Containers):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/
Als ich tiefer ging, entdeckte ich die "Wurzel" dieser Schwere - es ist die
modules
Datei des JDK:# ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
Nun also die Fragen, die kamen:
Warum wird es
alpine
nicht mehr als Basis-Image für schlanke Java 11-Images verwendet?Warum wird die instabile Sid- Version für LTS-Java-Images verwendet?
Warum ist das schlanke / kopflose / JRE-Paket für OpenJDK 11 im Vergleich zum ähnlichen OpenJDK 8-Paket so groß?
- Was ist diese Moduldatei , die 135 MB in OpenJDK 11 bringt?
UPD : Als Lösung für diese Herausforderungen könnte man diese Antwort verwenden: Java 11-Anwendung als Docker-Image