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
. Это вызывает 2 проблемы:это на 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?Почему для образов LTS Java используется нестабильная версия sid ?
Почему пакет slim / headless / JRE для OpenJDK 11 такой большой по сравнению с аналогичным пакетом OpenJDK 8?
- Что это за файл модулей, который дает 135 МБ в OpenJDK 11?
UPD : в качестве решения этих проблем можно использовать следующий ответ: приложение Java 11 как образ докера