# stage 1
FROM openjdk:11-slim as build
LABEL maintainer="Young Jun Yang <dasd412@naver.com>"
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
RUN mkdir -p target/dependency && (cd target/dependency; jar -xf /app.jar)
# stage 2 layerd jar
FROM openjdk:11-slim
VOLUME /tmp
ARG DEPENDENCY=/target/dependency
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","com.dasd412.api.configserver.ConfigServerApplication"]
stage 2에서 이미지를 stage 1과 동일한 걸로 사용하고 있었다.
도커파일로 만든 이미지들의 용량은 평균적으로 500MB였다.
# stage 1
FROM openjdk:11-slim as build
LABEL maintainer="Young Jun Yang <dasd412@naver.com>"
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
RUN mkdir -p target/dependency && (cd target/dependency; jar -xf /app.jar)
# stage 2 layerd jar
FROM gcr.io/distroless/java:11
VOLUME /tmp
ARG DEPENDENCY=/target/dependency
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","com.dasd412.api.configserver.ConfigServerApplication"]
stage2에서 distroless
이미지를 사용하였다. 이 이미지는 자바 실행을 위해 가볍게 만들어진 이미지라고 한다.
확인해보니 거의 절반 정도 용량이 줄어듦을 확인하였다.
컨테이너 인프라 환경 구축을 위한 쿠버네티스 / 도커