Ogłoszono, że Java 11 będzie najnowszą wersją LTS. Więc staramy się uruchomić nowe usługi w oparciu o tę wersję Java.
Jednak podstawowy obraz platformy Docker dla języka Java 11 jest znacznie większy niż jego odpowiednik dla języka Java 8:
openjdk:8-jre-alpine: 84 MBopenjdk:11-jre-slim: 283 MB
(Zastanawiam tylko oficjalnego OpenJDK oraz Najlżejszy obrazy dla każdej wersji Java).
Głębsze kopanie pozwoliło odkryć następujące „rzeczy”:
openjdk:11-jre-slimobrazu wykorzystuje obraz bazowejdebian:sid-slim. Powoduje to 2 problemy:jest to 60 MB większe niż
alpine:3.8że Debian
sidwersje są niestabilne
openjdk-11-jre-headlesspakiet zainstalowany w obrazie jest 3 razy większa niżopenjdk8-jre(wewnątrz pojemnika działa 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/Idąc głębiej, odkryłem „źródło” tego ciężaru - to
modulesplik JDK:# ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
A teraz pojawiły się pytania:
Dlaczego
alpinenie jest już używany jako obraz podstawowy dla smukłych obrazów Java 11?Dlaczego niestabilna wersja sid jest używana dla obrazów LTS Java?
Dlaczego pakiet slim / headless / JRE dla OpenJDK 11 jest tak duży w porównaniu z podobnym pakietem OpenJDK 8?
- Co to za plik modułów , który daje 135 MB w OpenJDK 11?
UPD : jako rozwiązanie tych wyzwań można by użyć następującej odpowiedzi: aplikacja Java 11 jako obraz dockera