当前位置: > > > > Docker 多阶段构建 golang 创建大镜像
来源:stackoverflow
2024-04-21 11:09:34
0浏览
收藏
从现在开始,我们要努力学习啦!今天我给大家带来《Docker 多阶段构建 golang 创建大镜像》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!
问题内容
当我在本地为 linux/windows/mac 构建项目时,我想对我的高岭项目使用多阶段构建 我有 12.6 mb 的大小,我目前有一个小型的 gaoling cli 程序。
现在我想使用 scratch
选项构建 lightwhigt docker 映像并构建 as
我使用以下内容,但是当我检查图像时,我看到它的大小 366mb
,知道我在这里缺少什么吗? 它应该小于 20mb…
#build stage FROM golang:alpine as builder WORKDIR /go/src/tzf ADD . /go/src/tzf RUN CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o ova tzf RUN apk add --no-cache git FROM golang:alpine RUN mkdir /build ADD . /build/ WORKDIR /build RUN CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o ova tzf FROM scratch COPY --from=builder /build/main /app/ WORKDIR /app CMD [“./ova -v"]
解决方案
构建最终映像时,请小心仅复制您希望最终出现在映像中的文件。让您的二进制文件成为图像的入口点是有意义的,因为您实际上无法用它做任何其他事情。
我可能会像这样制作一个两级管道:
# size of this stage doesn't matter; use the standard image from golang as builder workdir /go/src/tzf add . ./ run cgo_enabled=0 go build -ldflags '-extldflags "-static"' -o /ova tzf from scratch # only copy the one file, may as well put it in / copy --from=builder /ova /ova entrypoint ["/ova"] # if you want to launch it with default options, you can # cmd ["-v"]
您应该首先使用 golang:alpine
容器来构建应用程序,然后使用 alpine
来运行已编译的应用程序。
类似这样的事情:
# builder FROM golang:alpine AS builder WORKDIR /go/src/tzf ADD . /go/src/tzf RUN CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o ova tzf # runner FROM alpine WORKDIR /app COPY --from=builder /build/main /app/ CMD [“./ova -v"]
应该会产生一个占用空间较小的容器。
理论要掌握,实操不能落!以上关于《Docker 多阶段构建 golang 创建大镜像》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注公众号吧!