登录
首页 >  Golang >  Go问答

Docker 多阶段构建 golang 创建大镜像

来源:stackoverflow

时间:2024-04-21 11:09:34 287浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《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 创建大镜像》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>