Docker 수정 기

김윤기·2025년 9월 25일

협업을 하려면 윈도우, 맥등 여러 환경 요소를 통합해야하기 때문에 어쩔 수 없이 도커를 사용해야한다.

다음은 도커 파일이다.

보통 빌드용으로 많이 사용하는 이미지 내용이지만 최근 openjdk 이미지에 해당 공지가 올라오면서 유지보수가 안되는 이미지로 결국 보안 문제나 향후, 다른 문제를 겪을 수 있기 때문에 수정하게 되었다.

최신 트렌드로 도커 이미지를 줄이고 있다

How we reduced our java docker image from 1.5 GB to 300MB ?

커스텀 JRE(런타임)를 만들어서 JAR(자바 실행파일)을 매번 작동시키는 것이 좋다고 판단하였다

보통 빌드를 하고 배포를 하지만 빌드를 수동으로 하면서 휴먼 에러, 파일만 수정하고 빌드 없이 올라가는 경우 정상적인 구동이라 착각할 수 있기 때문이다.

# Dockerfile
# 1) 커스텀 JRE 생성(glibc 계열로 통일)
FROM bellsoft/liberica-runtime-container:jdk-all-cds-slim AS builder-jre
RUN $JAVA_HOME/bin/jlink \
    --module-path "$JAVA_HOME/jmods" \
    --add-modules ALL-MODULE-PATH \
    --strip-debug \
    --compress=zip-9 \
    --output /custom-jre

# 2) 애플리케이션 빌드
FROM gradle:9.0-jdk21-jammy AS builder

# 의존성 캐시 단계
COPY build.gradle .
COPY settings.gradle .
COPY gradle gradle/

RUN gradle dependencies

# 소스 빌드
COPY src ./src
RUN gradle bootJar --no-daemon

# 3) 실행 이미지
FROM alpine:3.22.1
ENV JAVA_HOME=/opt/java
ENV PATH="${JAVA_HOME}/bin:${PATH}"

COPY --from=builder-jre /custom-jre /opt/java

# Spring Boot 기본 설정상 단일 부트 JAR만 생성된다는 가정
COPY --from=builder /home/gradle/build/libs/*.jar /app.jar

EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
profile
글을 잘 쓰고 싶은 개발자 ✨

0개의 댓글