Se anuncia que Java 11 es la versión LTS más reciente. Entonces, estamos tratando de comenzar nuevos servicios basados en esta versión de Java.
Sin embargo, la imagen base de Docker para Java 11 es mucho más grande que el equivalente para Java 8:
openjdk:8-jre-alpine
: 84 MBopenjdk:11-jre-slim
: 283 MB
(Estoy considerando solo el OpenJDK oficial y las imágenes más livianas para cada versión de Java).
Una excavación más profunda descubrió las siguientes "cosas":
la
openjdk:11-jre-slim
imagen usa la imagen basedebian:sid-slim
. Esto trae 2 problemas:esto es 60 MB más grande que
alpine:3.8
las versiones de Debian
sid
son inestables
el
openjdk-11-jre-headless
paquete instalado en la imagen es 3 veces más grande queopenjdk8-jre
(dentro del contenedor Docker en ejecución):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/
Profundizando descubrí la "raíz" de esta pesadez: es el
modules
archivo del JDK:# ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
Entonces, ahora las preguntas que vinieron:
¿Por qué ya
alpine
no se usa como imagen base para las imágenes delgadas de Java 11?¿Por qué se usa la versión sid inestable para las imágenes Java LTS?
¿Por qué el paquete delgado / sin cabeza / JRE para OpenJDK 11 es tan grande en comparación con el paquete OpenJDK 8 similar?
- ¿Qué es este archivo de módulos que trae 135 MB en OpenJDK 11?
UPD : como solución para estos desafíos, se podría usar esta respuesta: la aplicación Java 11 como imagen acoplable