320x100
320x100

multi-stage build 

: 두 개의 도커 파일 중 하나를 build 이미지로 사용할 때, 빌드 이미지와 배포 이미지를 하나로 합치는 빌드 방법

: Dockerfile.build와 Dockerfile이 있을때 사용

 

ㆍ공식문서

: https://docs.docker.com/develop/develop-images/multistage-build/

 

Use multi-stage builds

 

docs.docker.com

 

 

 

멀티 스테이지 빌드를 사용하는 상황

ㆍ빌드용 이미지를 통해 프로그램을 빌드하고 배포용 이미지로 이를 배포하는 경우

FROM golang:1.16 AS builder

# 작업 디렉터리 변경
WORKDIR /go/src/github.com/alexellis/href-counter/

# golang.org에서 프로그램 다운로드 (빌드 프로그램으로 보임)
RUN go get -d -v golang.org/x/net/html  

# 작성한 go 프로그램을 builder의 루트 디렉터리에 복사
COPY app.go    ./

# 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/

# builder 이미지의 디렉터리에 있는 빌드된 app을 루트 디렉터리로 복사
COPY --from=builder /go/src/github.com/alexellis/href-counter/app ./

# go 프로그램 실행
CMD ["./app"]

1. builder에서 go 이미지를 통해 go 프로그램을 빌드하고 특정 디렉터리에 저장

2. alpine 이미지에 builder의 특정 디렉터리에 있는 go 프로그램을 실행

 

ㆍ같은 기반 이미지를 사용하는 이미지

: FROM 이미지가 같은 이미지일 경우

docker build --target=AS에서_명명한_이름1 -t 이미지_태그명 --target=AS에서_명명한_이름2 -t 이미지_태그명 

으로 빌드를 하면 2개의 이미지를 한번에 생성할 수 있음

 

 

※ p.s

: docker에 관한 책을 읽다가 multi stage build라는 개념을 알게 되어서 프로젝트에 잘 활용할 수 있을 것이라고 생각했지만 직접 실습해본 결과 이

300x250
728x90