🐡
Dockerのマルチステージビルドについて
はじめに
初めての記事投稿です。現在、コンテナの学習をしているので、参考になったことや改めて勉強になった知識をまとめていきます。
- 対象者
- コンテナ学習中の方
- 大まかな流れ
- 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 /go-app .
ENTRYPOINT ["./go-app"]
上記の流れのイメージ図が以下になります。
このDockerfileをビルドすると、以下になる
zenn-multi-stage latest xxxxxxxxxxxx About an hour ago 11.8MB
308MBから11.8MBも容量が下がっているを確認することができる。
参考記事
Discussion