Docker&Go 压缩镜像体积

涉及内容如下:

  • upx: 二进制文件压缩,一般可以压缩50%左右
  • go build -ldflags 编译优化,可以参考Go gcflags/ldflags 的说明
  • Docker的空镜像scratch
  • Docker编译优化: 层减少、多阶段构建
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
FROM golang:alpine as build

WORKDIR /go/src/app

COPY . .

RUN apk --no-cache add ca-certificates upx && \
 CGO_ENABLED=0 go build -ldflags '-s -w -extldflags "-static"' -o /go/bin/app ./main.go \
 && upx -9 /go/bin/app

FROM scratch

COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=build /go/bin/app /app
ENTRYPOINT ["/app"]

最终压缩体积如下 镜像体积结果