Docker - Multi-Stage Builds

OneDayDev·2022년 12월 20일
0

Docker

목록 보기
1/1

참고: 도커 Docs

이미지 제작에서 가장 어려운 점 중 하나는 배포하기 쉽게 이미지 사이즈를 작게 관리하는 것입니다.

Multi-Stage builds 이전에는..

보통 개발에 사용할 Dockerfile을 한 개만 갖는 것이 매우 일반적이지만
Multi-Stage Builds 전에는 응용 프로그램을 빌드하는 데 필요한 모든 것을 포함한 환경(개발 환경)과 가볍게 응용 프로그램 사용할 환경(운영 환경)을 나눠 빌드하기 위해서 두 개의 Dockerfile을 사용했었습니다. 이 방법을 builder pattern이라고 합니다.
하지만, 두 개의 Dockerfile을 다뤄야 되는 builder pattern은 이상적이지 않습니다.

Multi-Stage builds

Multi-Stage Builds에서는 Dockerfile에서 여러 FROM문을 사용합니다.

<예시>

FROM golang:1.16
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html  
COPY app.go ./
RUN CGO_ENABLED=0 go build -a -installsuffix cgo -o app .

FROM alpine:latest  
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/alexellis/href-counter/app ./
CMD ["./app"]

위와 같은 경우 --from=0는 첫번째 FROM절이 있는 Stage를 뜻 합니다.
FROM문에서 FROM <이미지> AS <Stage 이름>으로 설정해서 이름으로 사용할 수 도 있습니다.

버전 호환성

Multi-Stage Builds는 Docker 엔진 17.05에서 도입되었습니다.

profile
안녕하세요.

0개의 댓글