选择Golang docker基础图像

时间:2017-10-31 05:44:42

标签: docker go alpine

图片golangalpine的尺寸大约为300Mb

使用golang图片而不是普通alpine有什么好处?

2 个答案:

答案 0 :(得分:3)

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

在撰写本文时,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:alpinealpine或上面的评论中提到的scratch部署到生产中。

答案 1 :(得分:3)

为什么不scratchcenturylink

您可以构建静态转二进制文件并将其复制到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);

Here你可以找到一些关于docker,go和scratch的额外信息,here你可以找到一些关于GOOS值的信息。