2025

Docker Image 최적화 - 멀티스테이지 구성하기

트루홍 2025. 5. 28. 22:52

AS-IS 

 dockerfile 을 작성할때 흔히 다음과 같이 maven 베이스 이미지에 빌드하고 jar 를 실행하는 단일 스테이지 구성을 사용

FROM maven:3.9.8-amazoncorretto-21

WORKDIR /app
COPY . .
RUN mvn clean package
CMD ["java", "-jar", "target/app.jar"]

 

 

TO-BE 

 멀티 스테이지 빌드는 빌드와 실행환경을 분리하여 꼭 필요한 파일만 포함되도록 만들어 준다. 

# 1️. 빌드 전용 스테이지
FROM maven:3.9.8-amazoncorretto-21 AS build

WORKDIR /app
COPY . .
RUN mvn clean package -Dmaven.test.skip=true

# 2️. 실행 전용 스테이지
FROM amazoncorretto:21

WORKDIR /app
COPY --from=build /app/target/app.jar ./app.jar

CMD ["java", "-jar", "app.jar"]

 

작동원리를 요약하면, 

- 첫 번째 스테이지 (build) 에서는 jar 파일만 빌드

- 두번째 실행전용 스테이지에서는 경량 런타임  이미지 (amazoncorretto:21) 를 사용하고, --from=build 키워드를 이용해서 jar 파일만 실행전용 스테이지에 복사하게 된다. 

- 결과적으로 Maven, JDK, 빌드 캐시 ( m2 ) src 디렉토리등 불필요한 파일은 최종 이미지에 포함되지 않음 

- 단일 스테이지에서 800mb 이상 생성되는 사이즈가 약 250mb 수준으로 감소! 

 

 

기타 docker 성능 최적화

1. 최소 패키지 설치 (--no-install-recmmends)

apt-get install -y --no-install-recommends tzdata

 

2. ENV CATALINA_OPS 를 통한 메모리 최적화 

- JVM 이 컨테이너 전체 메모리의 50-70 프로만 사용하도록 제한 ( 컨테이너의 메모리 과다 사용을 방지.)

-XX:InitialRAMPercentage=50.0
-XX:MaxRAMPercentage=70.0

 

 

반응형