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-slimimagem usa a imagem basedebian:sid-slim. Isso traz 2 questões:isso é 60 MB maior que
alpine:3.8as versões do Debian
sidsão instáveis
o
openjdk-11-jre-headlesspacote 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
modulesarquivo 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
alpinenã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