一般通用的在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