选择 Golang docker 基础镜像

She*_*tyh 2 go docker alpine-linux

图像的大小golangalpine左右不同300Mb

使用golangimage 而不是 plain 有alpine什么好处?

bos*_*ood 5

golang:alpine简短回答:比较和之间的差异会更公平alpine

在撰写本文时,该golang映像是基于 Debian 构建的,这是一个与 Alpine 不同的发行版。我将引用 Docker Hub 的文档

golang:<version>

这是事实上的图像。如果您不确定自己的需求是什么,您可能想使用这个。它被设计为既可用作一次性容器(安装源代码并启动容器来启动应用程序),也可用作构建其他映像的基础。

golang:alpine

该镜像基于流行的 Alpine Linux 项目,可在 alpine 官方镜像中找到。Alpine Linux 比大多数发行版基础镜像 (~5MB) 小得多,因此通常会导致镜像更精简。

当需要尽可能小的最终图像尺寸时,强烈建议使用此变体。需要注意的主要警告是,它确实使用 musl libc 而不是 glibc 等,因此某些软件可能会遇到问题,具体取决于其 libc 要求的深度。然而,大多数软件都没有这个问题,所以这个变体通常是一个非常安全的选择。请参阅此黑客新闻评论线程,了解可能出现的问题的更多讨论以及使用基于 Alpine 的图像的一些赞成/反对比较。

总之,基于 Alpine 构建的镜像往往比 Debian 的镜像小。但是,它们不会包含您可能会发现对开发和调试有用的各种系统工具。一个常见的折衷方案是使用该golang风味构建二进制文件,并使用 、 或如上面评论中提到的 部署到golang:alpine生产alpine环境scratch


db8*_*b80 5

为什么不从ScratchCenturylink 开始呢?

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

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

假设您的 go 二进制文件名为main_go,这是您需要的Dockerfile

FROM centurylink/ca-certs
ADD main_go /
CMD ["/main_go"]
Run Code Online (Sandbox Code Playgroud)

请记住划痕世纪链接是空白图像,因此您必须使用内置的所有库静态编译您的应用程序。

例子:

CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main_go .
Run Code Online (Sandbox Code Playgroud)

在这里你可以找到一些关于 docker、go 和 scratch 的额外信息,在这里你可以找到一些关于 GOOS 值的信息。

  • Centurylink 存储库不再维护,因此我建议编辑答案并删除对其的引用。 (2认同)