2
1

More than 3 years have passed since last update.

goのdocker環境をマルチステージビルドを利用して立ててみる

Posted at

go環境をdockerで構築する際、マルチステージビルドを利用するとコンテナのサイズが小さくなる。各レイヤーごとに処理をわけ、実際に使用するイメージでは必要のない生成物は、それ以前のレイヤーのみが持つように指定することができる。

マルチステージビルドとは

Dockerfile内にFROM行を複数記述するだけで、ビルドステージを分けることができる。こうすることによって、最終的にイメージに含めたくない内容を除外することが可能になり、その結果、イメージのサイズが小さくなる。

マルチステージビルドを利用しない場合

Dockerfile

FROM golang:1.15.7

COPY . .
RUN apt install -y git tar
RUN go build -o /tmp/app main.go
CMD [ "/tmp/app" ]
main.go
package main
import "fmt"
func main() { fmt.Printf("hello world!") }
image size
REPOSITORY  TAG     IMAGE ID      CREATED        SIZE
example     latest  809b451bc01f  7 minutes ago  841MB

マルチステージビルドを利用する場合

Dockerfile
FROM golang:1.15.7 as build
COPY . .
RUN apt install -y git tar
RUN go build -o /tmp/app main.go


FROM alpine:3.8
COPY --from=build /tmp/app /app
CMD [ "/app" ]
image size
REPOSITORY     TAG     IMAGE ID      CREATED        SIZE
example-multi  latest  e223c19951f4  3 seconds ago  6.46MB

このように、imageのサイズが 841MB - 6.46MB = 834.54MB ほど小さくなった。

参考サイト

2
1
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
1