Java 11 оголошено як останню версію LTS. Отже, ми намагаємося запускати нові сервіси на основі цієї версії Java.
Однак базове зображення Docker для Java 11 набагато більше, ніж еквівалент для Java 8:
openjdk:8-jre-alpine: 84 Мбopenjdk:11-jre-slim: 283 Мб
(Я розглядаю лише офіційний OpenJDK та найлегші зображення для кожної версії Java.)
Глибше копання виявило такі "речі":
openjdk:11-jre-slimзображення використовує базове зображенняdebian:sid-slim. Це стосується двох питань:це на 60 Мб більше
alpine:3.8в Debian
sidверсії нестабільні
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/Проникаючи глибше, я виявив "корінь" цієї важкості - це
modulesфайл JDK:# ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
Отже, тепер питання, які виникли:
Чому він більше
alpineне використовується як базовий образ для тонких зображень Java 11?Чому нестабільна версія sid використовується для зображень Java LTS?
Чому тонкий / безголовий / пакет JRE для OpenJDK 11 настільки великий порівняно з аналогічним пакетом OpenJDK 8?
- Що це за модуль, який приносить 135 Мб у OpenJDK 11?
UPD : як рішення цих завдань можна використовувати цю відповідь: додаток Java 11 як зображення докера