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 як зображення докера