본문 바로가기

GO

4) Go Dockerfile 만들기 ( go mod )

반응형

앞에서 만들어 놓은 helloTest 를 Dockerfile로 만들어서 서버에서 실행시켜 보자.

 

먼저 Dockerfile을 만드는 방법은 생각보다 단순하다. 

 

1) single stage 방법

FROM golang:alpine

ADD . .

RUN go build main.go
CMD ["./main"]

위와 같은 방법으로 하게 되면 go lib 를 모두 포함한 이미지가 만들어져 실제 docker image 사이즈 700M 이 넘어 갈만큼 커지는것을 확인 할수 있다. 

 

사실 go 를 build 하고 나오는 실행 파일만 있으면 되는데 이미지에 불필요한 lib가 들어가는 모양이 되는것이다. 

이를 해결하기 위해 Multi Stage 방법이 있다는것을 알게 되었다.

 

2) Multi Stage 방법 

단순하다. go bulild 하고 빌드한 실행파일 만으로 docker image를 만드는것이다. 

FROM golang:alpine AS builder
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

WORKDIR /build
COPY go.mod go.sum main.go ./
RUN go mod download
RUN go build -o main .
WORKDIR /dist
RUN cp /build/main .

FROM scratch
COPY --from=builder /dist/main .
ENTRYPOINT ["/main"]

 

위에서 처럼 Go 를 빌드하고 나서 나오는  실행 파일만으로 두번째 stage에서 이미지를 만드는것을 확인할수 있다. 

이렇게 만들어지는 이미지는 크기가 굉장히 줄어는것을 확인 할수 있다. 

docker build 후 결과

 

 

docker images가 정상적으로 만들어진것이 보인다. 

docker run -p 8080:8080 hellotest:v1

이제 브라우저에서 잘 실행되는지 테스트 해보자 .

 

정상적으로 실행되는것을 확인 할 수 있다. 

 

이제 이 이미지를 ECR에 올리고 올린 이미지를 배포하는것 까지 테스트 해보자.

'GO' 카테고리의 다른 글

5) AWS ECR에 docker images Push하기  (0) 2021.03.05
3) GO Module 이란? GO Module 테스트  (0) 2021.02.17
2) GO RESTAPI 만들기.  (0) 2021.02.02
1) GO 설치하기  (0) 2021.02.01