通常编译时依赖一些构建工具,但运行时并不需要,为了缩小可运行镜像大小,普通做法是使用多个dockerfile,用shell脚本把多个docker build步骤串联起来,这样做没有任何问题;但还有其他方法,可以只使用一个Dockerfile把多个阶段都写在里面,下一个步骤引用之前步骤生成的文件,这样只需要一个docker build命令就可以了。
#第一阶段编译代码
FROM golang:1.7.3 as builder
WORKDIR /go/src/
RUN go get -d -v golang.org/x/net/html
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
#第二阶段构建可运行镜像
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
#--from=0结果类似,使用别名更容易理解
COPY --from=builder /go/src/app .
CMD ["./app"]