Ответ 1
Почему
alpine
не используется в качестве базового образа для изображений Java 11 slim?
Это потому, что, к сожалению, в настоящее время нет официальной стабильной сборки OpenJDK 11 для Alpine.
Alpine использует musl libc, в отличие от стандартного glibc, используемого большинством Linux-систем, что означает, что JVM должна быть совместима с musl libc для поддержки vanilla Alpine. Порт musJ OpenJDK разрабатывается в рамках проекта OpenJDK Portola.
Текущий статус представлен на странице OpenJDK 11:
-
Сборка Alpine Linux, ранее доступная на этой странице, была удалена с JDK 11 GA. Он не готов к производству, потому что он не был достаточно тщательно протестирован, чтобы считаться сборкой GA. Пожалуйста, используйте раннюю сборку JDK 12 Alpine Linux вместо нее.
Единственными стабильными версиями OpenJDK для Alpine в настоящее время являются 7 и 8, предоставленные проектом IcedTea.
Тем не менее - если вы готовы рассмотреть иное, нежели официальный OpenJDK, Azul Zulu OpenJDK предлагает убедительную альтернативу:
- Он поддерживает Java 11 на Alpine musl (версия 11.0.2 на момент написания статьи);
- Это сертифицированная сборка OpenJDK, проверенная с использованием пакета соответствия OpenJDK TCK;
- Это бесплатно, с открытым исходным кодом и Docker готов (Dockerhub).
Информация о доступности и планах поддержки приведена в разделе Схема поддержки Azul.
Обновление от 06.03.19: со вчерашнего дня openjdk11
доступен в репозиториях Alpine! Это может быть получено на Alpine с помощью:
apk --no-cache add openjdk11
Пакет основан на jdk11u
OpenJDK и портированных исправлениях из проекта Portola, представленных в следующем PR. Слава и огромное спасибо альпийской команде.
Почему нестабильная версия sid используется для образов LTS Java?
Это честный вопрос/запрос. На самом деле есть открытый билет для предоставления Java 11 в стабильной версии Debian:
https://github.com/docker-library/openjdk/issues/237
Обновление, 26/12/18: проблема была решена, и теперь тонкий образ OpenJDK 11 основан на stretch-backports
OpenJDK 11, который недавно был доступен (ссылка для связи с общественностью).
Почему пакет slim/headless/JRE для OpenJDK 11 такой большой по сравнению с аналогичным пакетом OpenJDK 8? Что это за файл модулей, который приносит 135 МБ в OpenJDK 11?
Java 9 представила систему модулей, которая представляет собой новый и улучшенный подход для группировки пакетов и ресурсов по сравнению с файлами JAR. Эта статья от Oracle дает очень подробное введение в эту функцию:
https://www.oracle.com/corporate/features/understanding-java-9-modules.html
Файл modules
объединяет все модули, поставляемые с JRE. Полный список модулей можно распечатать с помощью java --list-modules
. modules
действительно очень большой файл, и, как прокомментировано, он содержит все стандартные модули, и поэтому он довольно раздутый.
Однако следует отметить, что он заменяет rt.jar
и tools.jar
которые, помимо прочего, устарели, поэтому при учете размера modules
сравнению с сборками OpenJDK до 9, размеров rt.jar
и tools.jar
должна быть вычтена (они должны занимать около 80 МБ вместе взятых).