다단계 빌드 사용다단계 빌드를 사용하면 FROM Dockerfile에서 여러 문 을 사용할 수 있습니다 . 각 FROM 명령어는 다른 기준을 사용할 수 있으며 각각의 명령어는 새로운 빌드 단계를 시작합니다. 한 스테이지에서 다른 스테이지로 아티팩트를 선택적으로 복사하여 최종 이미지에서 원하지 않는 것을 남겨 둘 수 있습니다. 이것이 어떻게 작동하는지 보여주기 위해 이전 섹션의 Dockerfile을 조정하여 다단계 빌드를 사용합시다. Dockerfile :
FROM golang:1.7.3
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 GOOS=linux 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"]
단일 Dockerfile 만 필요합니다. 별도의 빌드 스크립트가 필요하지 않습니다. Just Run: docker build . $ docker build -t alexellis2/href-counter:latest .
최종 결과는 이전과 동일한 작은 제작 이미지이며, 복잡성이 현저히 줄어 듭니다. 중간 이미지를 작성할 필요가 없으며 로컬 시스템에 아티팩트를 전혀 추출 할 필요가 없습니다. 어떻게 작동합니까? 두 번째 FROM 명령은 alpine:latest 이미지를 기본으로 새 빌드 단계를 시작합니다 . COPY --from=0 선은 이전 단계의 제작 된 이슈만을이 새로운 단계로 복사합니다.
Go SDK 및 중간 아티팩트는 남겨져 있으며 최종 이미지에 저장되지 않습니다. |