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-slim
obrazu wykorzystuje obraz bazowejdebian:sid-slim
. Powoduje to 2 problemy:jest to 60 MB większe niż
alpine:3.8
że Debian
sid
wersje są niestabilne
openjdk-11-jre-headless
pakiet 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
modules
plik 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
alpine
nie 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