golang でgo modを使う場合のDockerfile

golangでgo mod(Go Modules) を使う場合のDockerfile情報があまりなかったのと、マルチステージビルドを試したかったのでやってみた。

マルチステージビルドを使いたかったのは、普通にDockerでビルドするとえらく大容量になってしまうので、容量を削減したかったのが主な理由。ちなみに、マルチステージを使う前のイメージサイズは283.6 MB。

go自体は main.go の1ファイルだけ。

以下がDockerfile


#Step 1 ビルド処理のみ
FROM golang:alpine as builder

RUN apk update \
&& apk add git

RUN mkdir /app
WORKDIR /app
COPY go.mod .
COPY go.sum .

RUN go mod download
COPY . .

RUN go build -o /main

#Step2 ビルドしたファイルを実際に使うために移動
FROM alpine:3.9

COPY --from=builder /main .

ENTRYPOINT ["/main"]

こちらでビルドすると、8.6 MBぐらいになってかなり軽量化できた。