Why is the Java 11 base Docker image so large? (openjdk:11-jre-slim)

Java 11 is announced to be the most recent LTS version. So, we’re trying to start new services based on this Java version.

However, the base Docker image for Java 11 is much larger than the equivalent for Java 8:

  • openjdk:8-jre-alpine: 84 MB

  • openjdk:11-jre-slim: 283 MB

(I’m considering only the official OpenJDK and the most lightweight images for each Java version.)

Deeper digging uncovered the following “things”:

  • the openjdk:11-jre-slim image uses the base image debian:sid-slim. This brings 2 issues:

    • this is 60 MB larger than alpine:3.8

    • the Debian sid versions are unstable

  • the openjdk-11-jre-headless package installed in the image is 3 times larger than openjdk8-jre (inside running Docker container):

    • 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/
      

      Going deeper I discovered the “root” of this heaviness – it’s the modules file of the JDK:

      # ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
      135M    /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
      

So, now the questions which came:

  • Why is alpine not used any more as a base image for Java 11 slim images?

  • Why is the unstable sid version used for LTS Java images?

  • Why is the slim/headless/JRE package for OpenJDK 11 so large compared to the similar OpenJDK 8 package?

    • What is this modules file which brings 135 MB in OpenJDK 11?

UPD: as a solutions for these challenges one could use this answer: Java 11 application as docker image

4 Answers
4

Leave a Comment