图片golang
和alpine
的尺寸大约为300Mb
。
使用golang
图片而不是普通alpine
有什么好处?
答案 0 :(得分:3)
简短回答:比较golang:alpine
和alpine
之间的差异会更公平。
在撰写本文时,golang
图像是由Debian构建的,这是一种与Alpine不同的版本。 I'll quote the documentation from Docker Hub:
golang:<version>
这是事实上的图像。如果你不确定 您的需求是什么,您可能想要使用这个。它是专门设计的 用作丢弃容器(安装源代码和 启动容器以启动您的应用程序),以及构建的基础 其他图片。
和
golang:alpine
此图片基于颇受欢迎的Alpine Linux项目, 可在高山官方形象中找到。 Alpine Linux要小得多 比大多数分发基础图像(~5MB),因此导致很多 一般来说,图像更苗条。
当最终图像尺寸为时,强烈建议使用此变体 尽可能小。需要注意的主要警告是它确实如此 使用musl libc而不是glibc和朋友,所以某些软件可能 根据他们的libc要求的深度遇到问题。 但是,大多数软件都没有这个问题,所以这个 变体通常是一个非常安全的选择。请参阅此黑客新闻评论 讨论可能出现的问题和一些问题 使用基于阿尔卑斯山的图像进行比较/比较。
总之,使用Alpine构建的图像往往比Debian图像小。但是,它们不会包含您可能认为对开发和调试有用的各种系统工具。一个常见的折衷方案是使用golang
风格构建二进制文件,并使用golang:alpine
,alpine
或上面的评论中提到的scratch
部署到生产中。1}。 p>
答案 1 :(得分:3)
为什么不scratch或centurylink?
您可以构建静态转二进制文件并将其复制到docker镜像中。
docker镜像的大小将等于二进制文件的大小。
假设您的go二进制文件名为 main_go ,这是您需要的 Dockerfile :
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main_go .
请记住 scratch 和 centurylink 是空白图片,因此您必须使用内置的所有库静态编译您的应用。
示例:
use Facebook\InstantArticles\Client\Client;
// Instantiate an API client
$ia_client = Client::create(
'APP_ID',
'APP_SECRET',
'ACCESS_TOKEN',
'PAGE_ID'
);
// Push the article to your Facebook Page
$ia_client->importArticle($my_article);