官方文档文档

当构建 docker 镜像时,每运行一次 RUN 指令就会为镜像增加一个层,因此为了减小镜像体积经常看到如下样式的构建命令,将多个命令合成一行多次使用了 && 符号。:

1
2
RUN go get -d -v golang.org/x/net/html \
&& CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

分阶段构建镜像的思路在于:可以将先使用一个大而全的镜像构建程序,然后将构建产物复制到一个精简版本的镜像。

1
2
3
4
5
6
7
8
9
10
11
FROM golang:1.7.3 AS builder
WORKDIR /go/src/github.com/alexellis/href-counter/
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/
COPY --from=builder /go/src/github.com/alexellis/href-counter/app .
CMD ["./app"]