Solución:
Por que es
alpine
¿Ya no se utiliza como imagen base para imágenes delgadas de Java 11?
Esto se debe a que, lamentablemente, actualmente no hay una compilación oficial estable de OpenJDK 11 para Alpine.
Alpine usa musl libc, a diferencia del glibc estándar usado por la mayoría de Linux, lo que significa que una JVM debe ser compatible con musl libc para soportar vanilla Alpine. El puerto musl OpenJDK se está desarrollando bajo el proyecto Portola de OpenJDK.
El estado actual se resume en la página OpenJDK 11:
La compilación de Alpine Linux disponible anteriormente en esta página se eliminó a partir de JDK 11 GA. No está listo para producción porque no se ha probado lo suficiente como para ser considerado una compilación GA. Utilice la versión de acceso anticipado JDK 12 Alpine Linux en su lugar.
Las únicas versiones estables de OpenJDK para Alpine actualmente son 7 y 8, proporcionadas por el proyecto IcedTea.
Sin embargo, si está dispuesto a considerar otro que no sea el OpenJDK oficial, Zulu OpenJDK de Azul ofrece una alternativa convincente:
- Es compatible con Java 11 en Alpine musl (versión 11.0.2 en el momento de escribir este artículo);
- Es una compilación OpenJDK certificada, verificada utilizando la suite de cumplimiento OpenJDK TCK;
- Es gratuito, de código abierto y compatible con Docker (Dockerhub).
Para conocer la disponibilidad de soporte y la hoja de ruta, consulte la hoja de ruta de soporte de Azul.
Actualización, 6/3/19: A partir de ayer, openjdk11
está disponible en los repositorios de Alpine! Se puede agarrar en Alpine usando:
apk --no-cache add openjdk11
El paquete se basa en el jdk11u
La rama OpenJDK más arreglos portados del proyecto Portola, introducido con el siguiente PR. Felicitaciones y muchas gracias al equipo de Alpine.
¿Por qué es inestable? Sid versión utilizada para las imágenes LTS Java?
Esa es una pregunta / solicitud justa. De hecho, hay un ticket abierto para proporcionar Java 11 en una versión estable de Debian:
https://github.com/docker-library/openjdk/issues/237
Actualización, 26/12/18: El problema se ha resuelto y ahora la imagen delgada de OpenJDK 11 se basa en stretch-backports
OpenJDK 11 que se puso a disposición recientemente (enlace PR).
¿Por qué el paquete delgado / sin cabeza / JRE para OpenJDK 11 es tan grande en comparación con el paquete similar de OpenJDK 8? Que es esto modulos archivo que trae 135 MB en OpenJDK 11?
Java 9 introdujo el sistema de módulos, que es un enfoque nuevo y mejorado para agrupar paquetes y recursos, en comparación con los archivos jar. Este artículo de Oracle ofrece una introducción muy detallada a esta función:
https://www.oracle.com/corporate/features/understanding-java-9-modules.html
los modules
el archivo agrupa todos los módulos enviados con el JRE. La lista completa de módulos se puede imprimir con java --list-modules
. modules
De hecho, es un archivo muy grande y, como se comentó, contiene todos los módulos estándar y, por lo tanto, está bastante hinchado.
Sin embargo, una cosa a tener en cuenta es que reemplaza rt.jar
y tools.jar
que quedó en desuso, entre otras cosas, por lo que al contabilizar el tamaño de modules
en comparación con compilaciones OpenJDK anteriores a la 9, los tamaños de rt.jar
y tools.jar
deben restarse (deben ocupar unos 80 MB combinados).
a 07.2019 https://adoptopenjdk.net/ tiene soporte oficial de Alpine para Java 11:
-
https://github.com/AdoptOpenJDK/openjdk-docker/blob/master/11/jdk/alpine/
-
https://hub.docker.com/r/adoptopenjdk/openjdk11
Sin embargo, los módulos (jmods, jlink
) aún se considerará cuando se ensambla una aplicación mínima.
Nota: Delgado las imágenes no contienen algunos módulos (como java.sql
) – están excluidos explícitamente (https://github.com/AdoptOpenJDK/openjdk-docker/blob/21b8393b9c23f94d6921a56cce27b026537c6ca2/11/jdk/alpine/slim-java.sh#L233)
Si está considerando solo imágenes oficiales y su objetivo de logro es usar la imagen JRE más pequeña disponible, le sugiero que mire el OpenJDK oficial imagen openjdk:11-jre-slim-buster
que es solo 69,2 MB.