1

我想为我的 gaoling 项目使用多阶段构建,当我在本地为 linux/windows/Mac 构建项目时,我得到了12.6 mb 的大小,我目前有一个小的 gaoling CLI 程序。

现在我想用它来构建它,并使用scratch选项构建它 lightwhigt docker 图像并构建as

我使用以下内容,但是当我检查图像时,我看到它的大小366MB,知道我在这里缺少什么吗?它应该小于 20MB...</p>

#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"]
4

2 回答 2

2

您应该首先使用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"]

应该会产生一个占用空间小的容器。

于 2018-09-16T19:41:18.287 回答
0

构建最终映像时,请注意仅复制要在映像中结束的确切文件。在这里让你的二进制文件成为图像的入口点是有意义的,因为你几乎无法用它做任何其他事情。

我可能会像这样制作一个两阶段管道:

# 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"]
于 2018-09-16T19:45:27.723 回答