CafeM0ca

Docker build 이미지 크기 줄이기 본문

Programming

Docker build 이미지 크기 줄이기

M0ca 2022. 8. 24. 21:46
반응형

multi stage로 빌드하면 도커 이미지 사이즈가 줄어든다.

도커 파일을 작성할 때 일반 적으로 이런식으로 작성하곤 한다.

FROM golang:1.18.5-alpine3.16
WORKDIR /app
COPY . .
RUN go build -o main main.go

EXPOSE 8080
CMD [ "/app/main" ]

이미지를 설정해주고 현재 프로젝트 디렉토리를 컨테이너에 복사하고 빌드하고 실행한다.
이렇게 build된 dockerfile은 용량이 무지막지하게 큰데 간단한 프로젝트라도 1GB에 육박할 수 있다.

이 보다 더 좋은 방법으로는 multi-stage build 방법이 있다.
https://docs.docker.com/develop/develop-images/multistage-build/

이 방법은 FROM 을 여러개를 사용하여 각기 다른 스테이지를 만들어서 빌드와 실행을 구분한다.

#Build stage
FROM golang:1.18.5-alpine3.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o main main.go

# Run stage
FROM alpine:3.16
WORKDIR /app
COPY --from=builder /app/main .

EXPOSE 8080
CMD [ "/app/main" ]

Build stage에서는 바이너리를 빌드한다. builder의 /app/에는 go로 빌드된 main 바이너리가 존재하는데
이를 Run stage에 바이너리만 복사한다. 그럼 Build stage에서 사용한 소스코드 등 많은 용량이 Run stage에서는 바이너리 하나로만 존재하기 때문에 docker-image 크기를 대폭 줄일 수 있다.

 

내 경우에는 30배정도 줄었다.

+ alpine이 사이즈가 타이트한 이미지다.

반응형
Comments