代码之家  ›  专栏  ›  技术社区  ›  Shettyh

选择Golang docker base image

  •  3
  • Shettyh  · 技术社区  · 7 年前

    图像的大小 golang alpine 因周围环境而异 300Mb .

    使用的优点是什么 戈兰 图像而非普通 阿尔卑斯山

    2 回复  |  直到 7 年前
        1
  •  5
  •   db80    2 年前

    为什么不呢? scratch ?

    您可以构建一个静态go二进制文件,并将其复制到docker图像中。

    docker图像的大小将等于二进制文件的大小。

    假设您的go二进制文件被调用 main_go主菜单 ,这是 Dockerfile文件 您需要:

    FROM centurylink/ca-certs
    ADD main_go /
    CMD ["/main_go"]
    

    请记住这一点 划痕 centurylink 都是空白图像,因此你必须静态编译你的应用程序,并内置所有库。

    例子:

    CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main_go .
    

    Here 你可以找到一些关于docker的额外信息,去抓和 here 你可以找到一些关于谷歌价值的信息。

    更新:使用alpine进行多阶段构建以构建图像。

    ARG GO_VERSION=1.15.6
     
    # STAGE 1: building the executable
    FROM golang:${GO_VERSION}-alpine AS build
    RUN apk add --no-cache git
    RUN apk --no-cache add ca-certificates
     
    # add a user here because addgroup and adduser are not available in scratch
    RUN addgroup -S myapp \
        && adduser -S -u 10000 -g myapp myapp
     
    WORKDIR /src
    COPY ./go.mod ./go.sum ./
    RUN go mod download
     
    COPY ./ ./
     
    # Run tests
    RUN CGO_ENABLED=0 go test -timeout 30s -v github.com/gbaeke/go-template/pkg/api
     
    # Build the executable
    RUN CGO_ENABLED=0 go build \
        -installsuffix 'static' \
        -o /app ./cmd/app
     
    # STAGE 2: build the container to run
    FROM scratch AS final
    LABEL maintainer="gbaeke"
    COPY --from=build /app /app
     
    # copy ca certs
    COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
     
    # copy users from builder (use from=0 for illustration purposes)
    COPY --from=0 /etc/passwd /etc/passwd
     
    USER myapp
     
    ENTRYPOINT ["/app"]
    

    可以找到更多信息 here .

        2
  •  4
  •   bosgood    7 年前

    简单回答:比较两者之间的差异会更公平 golang:alpine alpine

    在撰写本文时 golang 这张图片是建立在Debian的基础上的,Debian是一个不同于Alpine的发行版。 I'll quote the documentation from Docker Hub :

    golang:<version>

    这是真实的图像。如果您不确定 你的需求是什么,你可能想用这个。它是设计的 用作一次性容器(装载源代码和 启动容器以启动应用程序),以及构建基础 关闭的其他图像。

    此图片基于流行的Alpine Linux项目, 比大多数分发基础映像(约5MB)更大,因此导致 一般来说,图像更苗条。

    当最终图像大小为 希望尽可能小。需要注意的主要警告是,确实如此 遇到的问题取决于其libc要求的深度。 然而,大多数软件对此没有问题,所以 变体通常是一种非常安全的选择。查看此黑客新闻评论 更多讨论可能出现的问题和一些 使用基于Alpine的图像的正反比较。

    总之,阿尔卑斯山上的图像往往比德比亚山的图像要小。但是,它们不包含您可能会发现对开发和调试有用的各种系统工具。一种常见的折衷方法是使用 戈兰 味道和部署到生产与任何 , 阿尔卑斯山 ,或如上述评论所述, scratch .