O Java 11 é anunciado como a versão mais recente do LTS. Então, estamos tentando iniciar novos serviços com base nesta versão Java.
No entanto, a imagem base do Docker para Java 11 é muito maior que o equivalente ao Java 8:
openjdk:8-jre-alpine
: 84 MBopenjdk:11-jre-slim
: 283 MB
(Estou considerando apenas o OpenJDK oficial e as imagens mais leves para cada versão do Java.)
Uma escavação mais profunda descobriu as seguintes "coisas":
a
openjdk:11-jre-slim
imagem usa a imagem basedebian:sid-slim
. Isso traz 2 questões:isso é 60 MB maior que
alpine:3.8
as versões do Debian
sid
são instáveis
o
openjdk-11-jre-headless
pacote instalado na imagem é 3 vezes maior queopenjdk8-jre
(dentro do contêiner do Docker em execução):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/
Aprofundando, descobri a "raiz" desse peso - é o
modules
arquivo do JDK:# ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
Então, agora as perguntas que vieram:
Por que
alpine
não é mais usado como imagem base para imagens slim do Java 11?Por que a versão sid instável é usada para imagens Java LTS?
Por que o pacote slim / headless / JRE para o OpenJDK 11 é tão grande em comparação com o pacote OpenJDK 8 semelhante?
- O que é esse arquivo de módulos que traz 135 MB no OpenJDK 11?
UPD : como solução para esses desafios, pode-se usar esta resposta: Aplicativo Java 11 como imagem do docker