She*_*tyh 2 go docker alpine-linux
图像的大小golang和alpine左右不同300Mb。
使用golangimage 而不是 plain 有alpine什么好处?
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。
为什么不从Scratch或Centurylink 开始呢?
您可以构建一个静态的 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 值的信息。
| 归档时间: |
|
| 查看次数: |
4786 次 |
| 最近记录: |