일반적으로 애플리케이션을 빌드할 때는 많은 의존성 패키지와 라이브러리를 필요로 한다.
특정 언어로 작성된 소스코드를 빌드하기 위해서는 관련 빌드 툴과 라이브러리가 필요할 수 있다.
Dockerfile로 이러한 코드를 빌드하기 위해서는
관련 도구들이 미리 설치된 이미지를 FROM에 명시하고 RUN 명령어로 소스코드를 컴파일 하게 되는데,
실행 파일의 크기가 매우 작더라도 이에 사용된 각종 패키지 및 라이브러리로 인해 이미지의 크기가 거대해질 수 있다.
17.05 버전 이상을 사용하는 도커 엔진은 이미지의 크기를 줄이기 위해 멀티 스테이지 빌드 방법을 사용할 수 있다.
하나의 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에서 빌드된 이미지의 최종 상태를 의미한다.
블로그에 없는 게 없네요;;;;;;