您现在的位置是:网站首页> 编程资料编程资料
多阶段构建优化Go 程序Docker镜像_Golang_
2023-05-26
482人已围观
简介 多阶段构建优化Go 程序Docker镜像_Golang_
引言
多阶段构建方式,是在 Dockerfile 中使用多个 FROM 指令,每个 FORM 指令都是一个新的构建阶段,并且可以方便地复制之前阶段的构件。让我们来看一个简单的 Go 程序。代码如下。
点击此处您可以获取代码。

构建 Docker 镜像
让我们来为它构建 Docker 镜像,Dockerfile 文件内容如下。
FROM golang:1.19-alpine WORKDIR /build COPY go.mod . RUN go mod download COPY . . RUN go build -o /main main.go ENTRYPOINT ["/main"]
完成后,我们得到了一个 359 MB大小的镜像。

现在让我们构建相同的程序,但使用多阶段构建:
FROM golang:1.19-alpine as builder WORKDIR /build COPY go.mod . RUN go mod download COPY . . RUN go build -o /main main.go FROM alpine:3 COPY --from=builder main /bin/main ENTRYPOINT ["/bin/main"]
完成后,我们居然得到了一个只有 12 MB 大小的 Docker 镜像。还不错,我们把镜像大小减少了约 30 倍。我们是如何完成的呢?

在第一种情况,使用单阶段构建,Docker 镜像中包含了以下内容。
- golang:1.19-alpine -- 345.93 MB
- source size -- 11.1 KB
- 编译后的应用程序大小 -- 6.5 MB
在第二种情况,我们先编译并构建了应用程序,然后将已经编译的结果复制到最后一个阶段。
- alpine size:3 -- 5.54 MB
- 编译后的应用程序大小 -- 6.5 MB
是否可以再减小 Docker 镜像的大小?
答案是:能。但为此我们需要使用 Docker Scratch -- 它是一个 0 MB 的 Docker 镜像。
FROM golang:1.19-alpine as builder WORKDIR /build COPY go.mod . RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o /main main.go FROM scratch COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ COPY --from=builder main /bin/main ENTRYPOINT ["/bin/main"]
完成后,我们的镜像大小为 6.66 MB。

以上就是多阶段构建优化Go 程序Docker镜像的详细内容,更多关于Go程序Docker镜像的资料请关注其它相关文章!
您可能感兴趣的文章:
相关内容
- Kotlin编程基础语法编码规范_Golang_
- Go使用select切换协程入门详解_Golang_
- go swagger生成接口文档使用教程_Golang_
- Go 编程复杂数据类型 Map_Golang_
- Go Excelize API源码阅读GetPageLayout及SetPageMargins_Golang_
- Go Excelize API源码解读GetSheetViewOptions与SetPageLayout_Golang_
- Golang官方限流器库实现限流示例详解_Golang_
- Golang 动态脚本调研详解_Golang_
- Go语言包和包管理详解_Golang_
- Go中的应用配置管理详解_Golang_
