본문 바로가기

Program

Docker 멀티 스테이지 빌드란? (빌드 시간 단축, 이미지 크기 감소)

반응형

 

멀티 스테이지 빌드(Multi-stage Build)란?

멀티 스테이지 빌드는 이름 그대로 도커 이미지 빌드 과정을 여러 단계(stage)로 나누어, 빌드에 필요한 파일만을 최종 이미지에 포함시키는 기법입니다.

이 기능은 Dockerfile에서 여러 개의 FROM 명령어를 사용하는 것을 허용하며, 각 스테이지에서 필요한 파일이나 바이너리만을 최종 단계로 복사(COPY) 하여 경량화된 이미지를 생성할 수 있습니다.


✅ 왜 멀티 스테이지 빌드를 써야 할까?

기존에는 빌드 도구나 의존성 설치 도구를 포함한 전체 환경을 한 이미지에 담아야 했기 때문에, 최종 이미지는 불필요하게 무겁고 보안상 위험이 많았습니다.

멀티 스테이지 빌드는 아래와 같은 장점을 제공합니다:

  • 이미지 크기 감소: 필요한 실행 파일만 포함하여 수백 MB의 공간을 절약 가능
  • 보안성 증가: 개발 도구, 빌드 도구 미포함으로 공격 표면 감소
  • 빌드 효율성: 캐싱을 활용하여 빠르게 재빌드 가능
  • 가독성 향상: 하나의 Dockerfile에 모든 과정을 기술할 수 있음

사용 예시: Go 애플리케이션 멀티 스테이지 빌드

# 1단계: 빌드용 스테이지
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

# 2단계: 실행용 스테이지 (경량 이미지)
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]

설명:

  1. builder 단계에서는 Go 언어 환경에서 코드를 빌드합니다.
  2. alpine은 매우 가벼운 리눅스 배포판입니다. 빌드된 myapp 실행 파일만 복사해 경량화합니다.

결과: 최종 이미지에는 Go 컴파일러가 포함되지 않으며, 약 10MB 정도의 경량 실행 이미지가 생성됩니다.


반응형

 

다양한 언어별 활용 예시

Node.js

FROM node:20 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html

Python (Flask 등)

FROM python:3.10-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt
COPY . .

FROM python:3.10-slim
WORKDIR /app
COPY --from=builder /app /app
CMD ["python", "app.py"]

고급 팁 및 고려 사항

  • 캐시 전략: 빌드 단계에서 COPY requirements.txt → RUN install 구조를 유지하면, 의존성이 바뀌지 않는 한 캐시가 재활용되어 빌드 속도가 빨라집니다.
  • 네이밍으로 참조: --from=builder 방식 외에도 FROM node:20 AS frontend 와 같이 명명된 스테이지를 사용하면 가독성이 올라갑니다.
  • 단일 Dockerfile 관리: CI/CD 환경에서 멀티 스테이지 빌드는 다양한 환경을 하나의 파일로 관리하는 데 매우 유리합니다.

멀티 스테이지 빌드 vs 전통적 Dockerfile 비교

항목 전통적 Dockerfile 멀티 스테이지 Dockerfile

이미지 크기 작음
보안성 낮음 높음
복잡도 낮음 약간 높음
유지보수성 낮음 높음
성능 최적화 제한적 용이

마무리

도커 멀티 스테이지 빌드는 단순한 기능 같지만, 실제 서비스 환경에서 배포 용량 최적화, 보안성 강화, 효율적 CI/CD 설계까지 가능하게 해주는 강력한 기술입니다. 단일 스테이지에서 복잡하게 작성했던 Dockerfile을 깔끔하고 효율적으로 리팩토링할 수 있으며, 여러 언어와 프레임워크에서 범용적으로 사용할 수 있습니다.

도커를 활용한 효율적인 배포를 고민 중이라면 멀티 스테이지 빌드를 반드시 익혀야 합니다.


📎 공식 문서 링크


🔖 관련 태그

  • #Docker
  • #도커최적화
  • #멀티스테이지빌드
  • #배포자동화
  • #DevOps

 

 

Docker로 멀티 컨테이너 애플리케이션 구성하기

 

Docker로 멀티 컨테이너 애플리케이션 구성하기

도커로 멀티 컨테이너 애플리케이션 구성하기현대의 웹 애플리케이션은 종종 하나의 컨테이너로 모든 것을 실행하지 않고, 역할을 분리한 여러 개의 컨테이너로 구성됩니다. 예를 들어 웹 서버

jjig810906.tistory.com

 

반응형