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
반응형