멀티스테이지 빌드 (Multi-stage Build)
빌드에 필요한 것과 실행에 필요한 것은 다릅니다. 컴파일러·빌드 도구·개발 의존성은 이미지를 만들 때만 쓰이는데, 한 스테이지로 빌드하면 이것들이 최종 이미지에 그대로 남습니다. 멀티스테이지 빌드는 빌더 스테이지에서 만든 결과물만 최종 스테이지로 복사하고 나머지는 통째로 버려, 같은 앱의 이미지를 1 GB대에서 100 MB대로 줄입니다.
01 개념 한눈에 보기
Interactive Step-by-StepDockerfile 을 하나의 스테이지로 쓰면, 빌드하며 만든 모든 것이 최종 이미지에 그대로 남습니다.
멀티스테이지는 Dockerfile 에 FROM 을 여러 번 씁니다. 첫 스테이지는 오직 빌드만 담당합니다.
02 쉽게 이해하기
For Everyone가구를 만든 뒤 톱·대패·나무 부스러기까지 함께 배송하는 대신, 완성된 가구만 포장해 보내는 것과 같습니다. 작업장(빌더 스테이지)은 배송 트럭에 싣지 않습니다.
Dockerfile 에 FROM 을 여러 번 써서 스테이지를 나누고, 마지막 스테이지에서 `COPY --from=builder` 로 빌드 산출물만 가져옵니다.
앞 스테이지는 최종 이미지에 포함되지 않으므로 컴파일러·devDependencies·소스 코드가 전부 빠집니다.
이미지가 작아지면 배포가 빨라지고, 공격 표면(설치된 도구·소스 노출)도 함께 줄어듭니다.
- –컴파일 언어(Go·Rust·Java)와 번들링이 필요한 프런트엔드 이미지 최적화
- –배포 속도 개선
- –컨테이너 보안 표면 축소
03 자주 묻는 질문
FAQ멀티스테이지 빌드 (Multi-stage Build)란 무엇인가요?+
빌드에 필요한 것과 실행에 필요한 것은 다릅니다. 컴파일러·빌드 도구·개발 의존성은 이미지를 만들 때만 쓰이는데, 한 스테이지로 빌드하면 이것들이 최종 이미지에 그대로 남습니다. 멀티스테이지 빌드는 빌더 스테이지에서 만든 결과물만 최종 스테이지로 복사하고 나머지는 통째로 버려, 같은 앱의 이미지를 1 GB대에서 100 MB대로 줄입니다.
멀티스테이지 빌드 (Multi-stage Build)은(는) 어디에 사용하나요?+
컴파일 언어(Go·Rust·Java)와 번들링이 필요한 프런트엔드 이미지 최적화, 배포 속도 개선, 컨테이너 보안 표면 축소
멀티스테이지 빌드 (Multi-stage Build)를 쉽게 비유하면?+
가구를 만든 뒤 톱·대패·나무 부스러기까지 함께 배송하는 대신, 완성된 가구만 포장해 보내는 것과 같습니다. 작업장(빌더 스테이지)은 배송 트럭에 싣지 않습니다.
