멀티 스테이지 빌드(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"]
설명:
- builder 단계에서는 Go 언어 환경에서 코드를 빌드합니다.
- 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로 멀티 컨테이너 애플리케이션 구성하기
도커로 멀티 컨테이너 애플리케이션 구성하기현대의 웹 애플리케이션은 종종 하나의 컨테이너로 모든 것을 실행하지 않고, 역할을 분리한 여러 개의 컨테이너로 구성됩니다. 예를 들어 웹 서버
jjig810906.tistory.com
'Program' 카테고리의 다른 글
Docker Scout 설치 및 사용 가이드 (0) | 2025.06.06 |
---|---|
도커(Docker) 설치 가이드: Windows, macOS, Linux (0) | 2025.06.06 |
Docker로 멀티 컨테이너 애플리케이션 구성하기 (0) | 2025.06.06 |
Docker 이미지 빌드 빠르게 하는 방법 (10분 걸리던게 1분에 완료!) (0) | 2025.06.05 |
Docker 컨테이너와 로컬 파일 공유하는 법 (2) | 2025.06.05 |