Java 11 è stata annunciata come la versione LTS più recente. Quindi, stiamo cercando di avviare nuovi servizi basati su questa versione di Java.
Tuttavia, l'immagine Docker di base per Java 11 è molto più grande dell'equivalente per Java 8:
openjdk:8-jre-alpine
: 84 MBopenjdk:11-jre-slim
: 283 MB
(Sto considerando solo l' OpenJDK ufficiale e le immagini più leggere per ogni versione di Java.)
Scavi più profondi hanno scoperto le seguenti "cose":
l'
openjdk:11-jre-slim
immagine usa l'immagine di basedebian:sid-slim
. Ciò comporta 2 problemi:questo è 60 MB più grande di
alpine:3.8
le versioni di Debian
sid
sono instabili
il
openjdk-11-jre-headless
pacchetto installato nell'immagine è 3 volte più grande diopenjdk8-jre
(all'interno del contenitore Docker in esecuzione):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/
Andando più in profondità ho scoperto la "radice" di questa pesantezza - è il
modules
file del JDK:# ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
Quindi, ora le domande che sono arrivate:
Perché
alpine
non viene più utilizzato come immagine di base per le immagini snelle di Java 11?Perché la versione sid instabile viene utilizzata per le immagini Java LTS?
Perché il pacchetto slim / headless / JRE per OpenJDK 11 è così grande rispetto al pacchetto OpenJDK 8 simile?
- Che cos'è questo file di moduli che porta 135 MB in OpenJDK 11?
UPD : come soluzione per queste sfide si potrebbe usare questa risposta: applicazione Java 11 come immagine docker