
멀티 스테이지 빌드는 빌드 환경과 실행 환경을 분리하여 컨테이너를 최적화하는 기법이다.
Dockerfile에서 여러 개의 FROM 단계를 사용하여 불필요한 파일을 제거하고, 가벼운 실행 이미지를 생성할 수 있다.
✅ 주요 장점
먼저, 일반적인 Dockerfile을 사용하여 빌드 도구까지 포함된 이미지를 만든다.
Dockerfile 작성 (싱글 스테이지)

이미지 빌드 : docker build -t single-stage -f Dockerfile-single .
컨테이너 실행 : docker run --rm single-stage
이미지 크기 확인

✅ 문제점
FROM golang:1.16 → 이 이미지는 Go 개발을 위한 빌드 도구(컴파일러, 패키지 관리자 등)가 포함된 무거운 환경.RUN go build -o hello main.go → 빌드가 완료된 이후에도 빌드 도구가 그대로 남아 있어 이미지가 커짐.이제 빌드 환경과 실행 환경을 분리하여 최적화한다.
Dockerfile 작성 (멀티 스테이지)

FROM golang:1.16 AS builder
FROM alpine:latest
COPY --from=builder /app/hello .
ENTRYPOINT ["./hello"]
이미지 빌드 : docker build -t single-stage -f Dockerfile-single .
컨테이너 실행 : docker run --rm single-stage
이미지 크기 확인

| 빌드 방식 | 이미지 크기 | 실행 환경 |
|---|---|---|
| 싱글 스테이지 빌드 | 922MB | 빌드 도구 포함 |
| 멀티 스테이지 빌드 | 9.77MB | 실행 파일만 포함 |
✅ 멀티 스테이지 빌드 적용 후 이미지 크기가 99% 이상 감소
✅ 실행 속도 및 배포 효율성이 대폭 향상
✅ 불필요한 빌드 도구 제거로 보안성 강화