当我在本地为linux / windows / Mac构建项目时,我想对我的gailing项目使用多阶段构建 我的大小为 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"]
答案 0 :(得分:1)
您应该首先使用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"]
应该导致占用空间较小的容器。
答案 1 :(得分: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"]