2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[検証]Multi-stage buildsにしたらめっちゃDocker Imageのサイズが小さくなった話~Golang編~

Last updated at Posted at 2023-03-18

自己紹介

初めまして。私は都内でwebエンジニアをしています。

今の会社にインターンとして経て、入社しました。

業務では、Nuxtjs, Golang, Kubernetesを用いて運用保守開発や

最近はPandasを用いてデータ分析など日々苦戦している若輩者です。

背景

DockerImageのMulti-stage buildsをするとサイズがどのくらい落ちるか気になったので、検証しました。

対象としている人

  • Docker学習中の人
  • Docker Imageを実装している人

実験結果

一目瞭然ですね。
まさかの約370MBの違いもありました。

Goのベースイメージを採用したDockerImage
golang:1.19をベースイメージとして使っています。
image.png

Multi-stage buildsを採用したDockerImage
scratchをベースイメージとして使っています。
image.png

それぞれの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"]
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?