tjtjtjのメモ

自分のためのメモです

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

参考

JDK11難民は続く。