Golang应用的多场景Dockerfile

一般通用的在Docker中编译Golang应用的方法需要2个Dockerfile——一个用于平台编译,另一个用于打包第一个镜像中编译的不包含工具的结果。这个叫编译模式。

v17.05

应用

开始一个”Hello World”应用:

package main

import "fmt"

func main() {
    fmt.Println("Hello world!")
}

单个Dockerfile

FROMFROM
COPY -from=0appWORKDIR
FROM golang:1.8.1

WORKDIR /go/src/test/

COPY main.go .

RUN GOOS=linux go build -o app .

FROM alpine:latest
RUN apk --no-cache add ca-certificates

WORKDIR /root/

COPY --from=0 /go/src/test/app .

CMD ["./app"]

构建与坚持大小

docker build .
docker ps
REPOSITORY          TAG     IMAGE ID            CREATED           SIZE

golang-multi-stage  latest  bcbbf69a9b59        6 minutes ago     6.7MB

结论

multi-stage