springboot+docker イメージのサイズ縮小
前回の続き。イメージのサイズの縮小を試す。今回は MultiStageBuild の必要性が理解できている。
hirokimatsumoto/alpine-openjdk-11 + alpine:3.8
ここ を参考にした。
イメージサイズ: 78.7MB。これは小さい。
Dockerfile.hiroki
FROM hirokimatsumoto/alpine-openjdk-11:latest as jlink-package # First: generate java runtime module by jlink. RUN jlink \ --module-path /opt/java/jmods \ --compress=2 \ --add-modules jdk.jfr,jdk.management.agent,java.base,java.logging,java.xml,jdk.unsupported,java.sql,java.naming,java.desktop,java.management,java.security.jgss,java.instrument \ --no-header-files \ --no-man-pages \ --output /opt/jdk-11-mini-runtime # Second: generate run image. FROM alpine:3.8 ENV JAVA_HOME=/opt/jdk-11-mini-runtime ENV PATH="$PATH:$JAVA_HOME/bin" COPY --from=jlink-package /opt/jdk-11-mini-runtime /opt/jdk-11-mini-runtime RUN mkdir /app COPY ./build/libs/kbhello-0.1.0.jar /app EXPOSE 8080 ENTRYPOINT [ "java", "-jar", "/app/kbhello-0.1.0.jar" ]
docker build -t hiroki . docker run -it --rm -p 8080:8080 hiroki
openjdk:8-jdk-alpine
イメージサイズ: 121MB
Dockerfile.openjdk8alp
FROM openjdk:8-jdk-alpine RUN mkdir /app COPY ./build/libs/kbhello-0.1.0.jar /app ENTRYPOINT [ "java", "-jar", "/app/kbhello-0.1.0.jar"]
docker build -t openjdk8alp . docker run -it --rm -p 8080:8080 openjdk8alp
openjdk:11-jdk-slim
イメージサイズ: 490MB
Dockerfile.openjdk11slim
FROM openjdk:11-jdk-slim RUN mkdir /app COPY ./build/libs/kbhello-0.1.0.jar /app ENTRYPOINT [ "java", "-jar", "/app/kbhello-0.1.0.jar"]
docker build -t openjdk11slim . docker run -it --rm -p 8080:8080 openjdk11slim
adoptopenjdk/openjdk11
ここ で adoptopenjdk を知る。 まず How to use this Image のようにイメージ作成。 イメージサイズ: 458MB
Dockerfile
FROM adoptopenjdk/openjdk11:latest RUN mkdir /app COPY ./build/libs/kbhello-0.1.0.jar /app ENTRYPOINT [ "java", "-jar", "/app/kbhello-0.1.0.jar"]
docker build -t adopt1 . docker run -it --rm -p 8080:8080 adopt1
adoptopenjdk/openjdk11:x86_64-alpine-jre-11.0.2.9
イメージサイズ: 153MB
Dockerfile.adoptjre11alp
FROM adoptopenjdk/openjdk11:x86_64-alpine-jre-11.0.2.9 RUN mkdir /app COPY ./build/libs/kbhello-0.1.0.jar /app ENTRYPOINT [ "java", "-jar", "/app/kbhello-0.1.0.jar"]
docker build -t adoptjre11alp . docker run -it --rm -p 8080:8080 adoptjre11alp
サイズ比較
$ docker images REPOSITORY SIZE hiroki 78.7MB openjdk8alp 121MB openjdk11slim 490MB adopt1 458MB adoptjre11alp 153MB
参考
- qiita Docker multi stage buildで変わるDockerfileの常識
- qiita OpenJDK11のdokcerイメージ(1GB)が大きいのでalpine linux+ jlinkで小さいイメージ(85MB)を作成する
- k11i.biz Java 11 リリース後のオススメ Docker イメージを考える
JDK11難民は続く。