🐡

Dockerのマルチステージビルドについて

2021/06/27に公開

はじめに

初めての記事投稿です。現在、コンテナの学習をしているので、参考になったことや改めて勉強になった知識をまとめていきます。

  • 対象者
    • コンテナ学習中の方
  • 大まかな流れ
    • Dockerのマルチステージビルドでできることを、記載する

概要

コンテナのイメージを作成する時に、できるだけ無駄な容量を作成したくない。その時に、無駄な容量を使用せずにビルドできる機能をマルチステージビルドという

問題点

イメージを作成する時に、余計なライブラリ等も含めたイメージを作成しているため、容量が大きくなっている。

FROM golang:1.16.5-alpine3.13
COPY ./main.go ./
RUN go build -o ./go-app ./main.go
ENTRYPOINT ["./go-app"]

上記をビルドすると、

single-stage  latest  xxxxxxxxxxxx  38 minutes ago  308MB

単純なコードでも308MBもイメージとして利用している

解決方法

コンパイルしたコードだけを実行用のコンテナイメージをコピーを実行する。そうすることで、容量を少なくすることができる。

FROM golang:1.16.5-alpine3.13 as builder
COPY ./main.go ./
RUN go build -o /go-app ./main.go

FROM alpine:3.13
COPY --from=builder /go-app .
ENTRYPOINT ["./go-app"]

上記の流れのイメージ図が以下になります。

このDockerfileをビルドすると、以下になる

zenn-multi-stage  latest  xxxxxxxxxxxx  About an hour ago  11.8MB

308MBから11.8MBも容量が下がっているを確認することができる。

参考記事

https://www.amazon.co.jp/dp/B08FZX8PYW/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

Discussion