多阶段构建优化Go|多阶段构建优化Go 程序Docker镜像
目录
- 引言
- 构建 Docker 镜像
- 是否可以再减小 Docker 镜像的大小?
引言 多阶段构建方式,是在
Dockerfile
中使用多个 FROM
指令,每个 FORM
指令都是一个新的构建阶段,并且可以方便地复制之前阶段的构件。让我们来看一个简单的 Go
程序。代码如下。点击此处您可以获取代码。
文章图片
构建 Docker 镜像 让我们来为它构建
Docker
镜像,Dockerfile
文件内容如下。FROM golang:1.19-alpineWORKDIR /buildCOPY go.mod .RUN go mod downloadCOPY . .RUN go build -o /main main.goENTRYPOINT ["/main"]
完成后,我们得到了一个 359 MB大小的镜像。
文章图片
现在让我们构建相同的程序,但使用多阶段构建:
FROM golang:1.19-alpine as builderWORKDIR /buildCOPY go.mod .RUN go mod downloadCOPY . .RUN go build -o /main main.goFROM alpine:3COPY --from=builder main /bin/mainENTRYPOINT ["/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 builderWORKDIR /buildCOPY go.mod .RUN go mod downloadCOPY . .RUN CGO_ENABLED=0 GOOS=linux go build -o /main main.goFROM scratchCOPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/COPY --from=builder main /bin/mainENTRYPOINT ["/bin/main"]
【多阶段构建优化Go|多阶段构建优化Go 程序Docker镜像】完成后,我们的镜像大小为 6.66 MB。
文章图片
以上就是多阶段构建优化Go 程序Docker镜像的详细内容,更多关于Go程序Docker镜像的资料请关注脚本之家其它相关文章!
推荐阅读
- 聚创心德
- 斑驳的树影
- webgl(threejs)生成房间楼层
- 构建多样化场景社群七朋元视界
- 沟通
- Day16-17|Day16-17 多线程
- MybatisPlus——实现多数据源操作
- 可以用园土来种植多肉植物吗()
- 德性是中道,幸福是合乎德性的活动,亚里士多德说的就一定对()
- 大数据——机器学习|机器学习之用解析解求解多元线性回归模型