docker 分段构建
参考教程
# Go语言环境基础镜像
FROM golang:latest
# 将源码拷贝到镜像中
COPY server.go /go/release/
# 指定工作目录
WORKDIR /go/release
# 编译镜像时,运行 go build 编译生成 app 可执行的二进制文件
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GOARM=6 go build -ldflags '-w -s' -o app server.go
# 指定容器运行时入口程序 app
ENTRYPOINT ["/go/release/app"]
分段构建
# 构建:使用golang:1.13版本
FROM golang:1.13 as build
# 容器环境变量添加,会覆盖默认的变量值
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct
# 设置工作区
WORKDIR /go/release
# 把全部文件添加到/go/release目录
ADD . .
# 编译:把cmd/main.go编译成可执行的二进制文件,命名为app
RUN GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -ldflags="-s -w" -installsuffix cgo -o app cmd/main.go
# 运行:使用scratch作为基础镜像
FROM scratch as prod
# 在build阶段复制时区到
COPY --from=build /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 在build阶段复制可执行的go二进制文件app
COPY --from=build /go/release/app /
# 在build阶段复制配置文件
COPY --from=build /go/release/config ./config
# 启动服务
CMD ["/app"]