반응형
멀티 스테이지를 이용한 Dockerfile 빌드하기
애플리케이션을 빌드할 때 많은 의존성 패키지, 라이브러리를 필요로 한다.
package main
import "fmt"
func main() {
fmt.Println("hello word")
}
main.go 파일의 내용 , 텝과 공백 위치 조심해야 한다.
FROM golang
ADD main.go /root
WORKDIR /root
RUN go build -o /root/mainApp /root/main.go
CMD ["./mainApp"]
main.go를 컴파일하고 출력 프로그램을 실행하는 Dockerfile
docker build . -t go_helloworld
이제 빌드를 해본다.
docker images
명령어 확인 후 실행해 보면 내용에 비해 용량이 큰 것을 알 수 있는데 소스 코드 빌드에 사용된 각종 패키지와 라이브러리가 자리를 차지하고 있는 것이다.
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=o /root/mainApp .
CMD ["./mainApp"]
이렇게 두 개의 FORM을 통해 다른 이미지를 명시해 준다.
docker build . -t go_helloworld:multi-stage
도커를 빌드한다.
이미지를 확인해 보면 사이즈가 작아진 것을 확인할 수 있다.
이렇게 멀티 스테이지 빌드는 반드시 필요한 실행 파일만 최종 이미지 결과물에 포함시켜 이미지 크기를 줄일 때 사용하면 된다.
📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다.
반응형
'DevOps > Docker' 카테고리의 다른 글
[Docker] : Onbuild, Stopsignal, Healthcheck, Shell (0) | 2022.02.25 |
---|---|
[Docker] : ENV, VOLUME, ARG, USER (0) | 2022.02.25 |
[Docker] : 캐시를 이용한 이미지 빌드 (0) | 2022.02.24 |
[Docker] : Dockerfile을 이용한 컨테이너 생성과 커밋 (0) | 2022.02.24 |
[Docker] : 빌드 컨텍스트 (0) | 2022.02.24 |
댓글