Dockerでscratchイメージを利用する
scratchイメージは1つのバイナリのみを含むような超最小イメージの作成などに利用できる.
ここではGoで作ったプログラムのバイナリをscratchイメージにのせて動かしてみる.
適当にプログラムを用意する:
code:main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
Dockerファイルはこんな感じ:
code:Dockerfile
FROM golang:1.11-alpine as builder
COPY . ./
RUN go build -o /main main.go
FROM scratch
COPY --from=builder /main /main
Goのイメージでビルドを行い,生成されたバイナリをscratchイメージにコピーしている.
イメージをビルドして実行してみる:
$ docker build -t 'hello-scratch' .
$ docker run --rm hello-scratch # => Hello, world!
生成されたイメージのサイズも小さくてイイネ.
code: docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-scratch latest 0a9aa1dfed50 3 minutes ago 1.91MB
golang 1.11-alpine cb1c8647572c 3 weeks ago 311MB