-
Notifications
You must be signed in to change notification settings - Fork 472
Closed
Labels
questionUsability question, not directly related to an error with the imageUsability question, not directly related to an error with the image
Description
Description
When building a Docker image for a service based on OpenJDK base image, I noticed that the runtime image created is 346Mb (and specifically the file libjvm.so under /lib/security) in size as compared to OracleLinux base image which creates a runtime image of 49Mb. What is the reason for this huge disparity in size?
I have tried building from different variants of 10 and 11 base images, but I still see the large runtime size.
Configuration
Docker -
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:13:02 2018
OS/Arch: darwin/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:22:38 2018
OS/Arch: linux/amd64
Experimental: true
macOS - Sierra (10.12.6)
Dockerfile -
FROM openjdk:10.0.2-slim
RUN jlink \
--add-modules java.xml.bind,java.sql,java.naming,java.management,java.instrument,java.security.jgss \
--verbose \
--strip-debug \
--compress 2 \
--no-header-files \
--no-man-pages \
--output /opt/jre-minimal
CMD du -sh /opt/jre-minimal
Actual Results
docker run --name ojdk -it openjdk_test
346M /opt/jre-minimal
Digging a little deeper, it appears the primary reason for this bloat is libjvm.so.
docker run --rm --name openjdk_image_size -it openjdk_test ls -la /opt/jre-minimal/lib/server
total 308028
drwxr-xr-x 2 root root 4096 Jul 23 17:58 .
drwxr-xr-x 5 root root 4096 Jul 23 17:58 ..
-rw-r--r-- 1 root root 1322 Jul 23 17:58 Xusage.txt
-rw-r--r-- 1 root root 24992 Jul 23 17:58 libjsig.so
-rw-r--r-- 1 root root 315379056 Jul 23 17:58 libjvm.so
Expected Results
Expect a much smaller runtime image. For example if I use Oracle Linux as base image,
Dockerfile -
FROM oraclelinux:7-slim
RUN yum -y install wget tar gzip && yum clean all \
&& wget -q https://download.java.net/java/GA/jdk10/10.0.2/19aef61b38124481863b1413dce1855f/13/openjdk-10.0.2_linux-x64_bin.tar.gz \
-P /opt/jdk \
&& tar -xzf /opt/jdk/openjdk-10.0.2_linux-x64_bin.tar.gz -C /opt/jdk \
&& rm /opt/jdk/openjdk-10.0.2_linux-x64_bin.tar.gz
ENV PATH=${PATH}:/opt/jdk/jdk-10.0.2/bin
RUN jlink \
--add-modules java.xml.bind,java.sql,java.naming,java.management,java.instrument,java.security.jgss \
--verbose \
--strip-debug \
--compress 2 \
--no-header-files \
--no-man-pages \
--output /opt/jre-minimal
CMD du -sh /opt/jre-minimal
I get a 49Mb image size, which is expected.
docker run --name oracle_linux_jdk -it oraclelinux_jdk_test
49M /opt/jre-minimal
pgilad, hpedrorodrigues, ddriddle, barchetta, radistao and 7 more
Metadata
Metadata
Assignees
Labels
questionUsability question, not directly related to an error with the imageUsability question, not directly related to an error with the image