도커 이미지를 경량화하기 위한 방법이다. 기존에 빌더와 러닝을 위한 Dockerfile을 각각 작성하고, 배치파일로 실행을 하던 번거로움을 하나의 Dockerfile로 간단하게 해결 가능하다.
as builder로 빌더 이름을 설정 가능하고, 해당 빌더 내에서 빌드한 파일은 COPY --from=[빌더명]으로 불러올 수 있다.
#BUILDER
FROM golang:latest as builder
WORKDIR /app
ARG CGO_ENABLED=0
COPY . .
RUN go mod download
RUN go build -o witb
# RUNNING
FROM scratch
RUN mkdir /app
COPY --from=builder /app/witb /app/witb
ENTRYPOINT ["/app/witb"]
작성한 파일로 빌드해보자
docker build -t witb .

다른 이미지들보다 확연히 작은 용량으로 빌드 완료

https://docs.docker.com/develop/develop-images/multistage-build/
https://www.hahwul.com/2020/10/07/docker-multistage-build-for-optimazation/
https://dev.to/sadeedpv/creating-a-dockerfile-for-your-go-backend-20n5