Kim Seogyu
Backend

Docker 멀티스테이지 빌드 최적화 가이드

멀티스테이지 빌드로 이미지 크기, 보안, 빌드 속도를 동시에 개선하는 실전 기준을 정리합니다.

Published 2026년 1월 2일1 min read164 words

Docker 멀티스테이지 빌드 최적화 가이드

목표

멀티스테이지의 목적은 단순히 이미지 크기 축소가 아닙니다.

  • 런타임 공격 표면 축소
  • 빌드 캐시 효율 개선
  • 배포 속도/일관성 향상

기본 패턴

FROM golang:1.23 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /out/server ./cmd/server

FROM gcr.io/distroless/static-debian12
COPY --from=builder /out/server /server
USER nonroot:nonroot
ENTRYPOINT ["/server"]

핵심은 "빌드 도구를 런타임 이미지에 남기지 않는 것"입니다.

캐시 최적화 규칙

  • 의존성 파일(go.mod, package-lock) 먼저 복사
  • 소스 복사는 그 다음
  • --mount=type=cache로 패키지 캐시 활용

베이스 이미지 선택 기준

  • scratch: 정적 바이너리 가능할 때
  • distroless: 보안 우선, 셸 불필요할 때
  • alpine/slim: 디버깅/호환성 필요할 때

자주 하는 실수

  • 런타임 이미지에 빌드 도구/소스코드 포함
  • latest 태그 고정으로 재현성 저하
  • 멀티스테이지인데도 불필요한 파일 복사

요약

좋은 Dockerfile은 "작다"보다 "예측 가능하고 안전하다"가 기준입니다. 멀티스테이지 + 캐시 순서 + 최소 런타임 이미지를 기본 규칙으로 두는 것이 가장 효과적입니다.

Share

Related Articles

Comments

이 블로그는 제가 알고 있는 것들을 잊지 않기 위해 기록하는 공간입니다.
직접 작성한 글도 있고, AI의 도움을 받아 정리한 글도 있습니다.
정확하지 않은 내용이 있을 수 있으니 참고용으로 봐주세요.

© 2026 Seogyu Kim