[Docker] 멀티 스테이지 빌드로 이미지 크기 줄이기

이주희·2022년 11월 17일
0

Docker

목록 보기
14/16

🧐 Multi-stage build가 필요한 이유

일반적으로 애플리케이션을 빌드할 때는 많은 의존성 패키지와 라이브러리를 필요로 한다.
특정 언어로 작성된 소스코드를 빌드하기 위해서는 관련 빌드 툴과 라이브러리가 필요할 수 있다.

Dockerfile로 이러한 코드를 빌드하기 위해서는
관련 도구들이 미리 설치된 이미지를 FROM에 명시하고 RUN 명령어로 소스코드를 컴파일 하게 되는데,
실행 파일의 크기가 매우 작더라도 이에 사용된 각종 패키지 및 라이브러리로 인해 이미지의 크기가 거대해질 수 있다.

17.05 버전 이상을 사용하는 도커 엔진은 이미지의 크기를 줄이기 위해 멀티 스테이지 빌드 방법을 사용할 수 있다.


Multi-stage build

  • 하나의 Dockerfile 안에 여러 개의 FROM 이미지를 정의함으로써 빌드 완료 시 최종적으로 생성될 이미지의 크기를 줄여준다.

  • 반드시 필요한 실행 파일만 최종 이미지 결과물에 포함시킴으로써 이미지 크기를 줄일 수 있다.


사용 예시

FROM golang
ADD main.go /root
WORKDIR /root
RUN go build -o /root/mainApp /root/main.go

FROM alpine: latest
WORKDIR /root
COPY --from=0 /root/mainApp . # 첫 번째 FROM 이미지에서 빌드한 /root/mainApp 파일을 alpine:lates 이미지에 복사한다.
CMD ["./mainApp"]
  • 일반적인 Dockerfile과 다르게, 2개의 FROM을 통해 2개의 이미지가 명시되었다.

  • 두 번째 FROM 아래에서 사용된 COPY 명령어는 첫 번째 FROM에서 사용된 이미지의 최종 상태에 존재하는 /root/mainApp 파일을 두 번째 이미지인 apline:latest에 복사한다.

  • 이때 --from=0은 첫 번째 FROM에서 빌드된 이미지의 최종 상태를 의미한다.

profile
🍓e-juhee.tistory.com 👈🏻 이사중

2개의 댓글

comment-user-thumbnail
2023년 10월 4일

블로그에 없는 게 없네요;;;;;;

1개의 답글