自己紹介
初めまして。私は都内でwebエンジニアをしています。
今の会社にインターンとして経て、入社しました。
業務では、Nuxtjs, Golang, Kubernetesを用いて運用保守開発や
最近はPandasを用いてデータ分析など日々苦戦している若輩者です。
背景
DockerImageのMulti-stage buildsをするとサイズがどのくらい落ちるか気になったので、検証しました。
対象としている人
- Docker学習中の人
- Docker Imageを実装している人
実験結果
一目瞭然ですね。
まさかの約370MBの違いもありました。
Goのベースイメージを採用したDockerImage
golang:1.19をベースイメージとして使っています。
Multi-stage buildsを採用したDockerImage
scratchをベースイメージとして使っています。
それぞれのDockerImage
Goのベースイメージを採用したDockerImage
FROM golang:1.19
WORKDIR /usr/src/app
COPY . ./
RUN go mod download && go mod verify
EXPOSE 8000
CMD ["go", "run", "./cmd/main.go"]
Multi-stage buildsを採用したDockerImage
# syntax=docker/dockerfile:1
FROM golang:1.19 as builder
WORKDIR /usr/src/app
COPY ./backend/go.mod ./backend/go.sum ./
RUN go mod download && go mod verify
COPY ./backend .
RUN CGO_ENABLED=0 go build -o binary ./cmd/main.go
FROM scratch
WORKDIR /usr/src/app
# scratch doesn't have timezone.
COPY --from=builder /usr/share/zoneinfo/Asia/Tokyo /usr/share/zoneinfo/Asia/Tokyo
COPY --from=builder /usr/src/app/binary /usr/src/app/binary
COPY ./backend/configs.yaml .
EXPOSE 8080
CMD ["./binary"]