selectGolang泊坞窗基础图像

图像golangalpine大小差异大约300Mb

使用golang图像而不是普通的alpine什么好处?

简单回答:比较golang:alpinealpine之间的差异是比较公平的。

在写golang文章的时候, golang图像是由Debian创build的,这个发行版与Alpine不同。 我将引用Docker Hub的文档 :

golang:<version>

这是事实上的形象。 如果你不确定你的需求是什么,你可能想用这个。 它的目的是作为一个扔掉容器(装载你的源代码,并启动容器启动你的应用程序),以及build立其他图像的基地。

golang:alpine

这张图片是基于阿尔卑斯山的官方图片中stream行的Alpine Linux项目。 Alpine Linux比大多数分布式映像(〜5MB)要小得多,因此总体上可以得到更薄的图像。

当最终图像尺寸尽可能小时,强烈build议使用这种变体。 需要注意的是,它使用musl libc而不是glibc和friends,所以某些软件可能会遇到问题,这取决于libc要求的深度。 然而,大多数软件没有这个问题,所以这个变种通常是一个非常安全的select。 有关可能出现的问题的更多讨论以及使用基于Alpine的图像的一些pro / con比较,请参阅此Hacker新闻评论主题。

总之,由Alpine构build的图像往往比Debian的要小。 但是,他们将不包含各种系统工具,您可能会发现有用的开发和debugging。 一个共同的妥协是build立你的二进制文件与golang风味,并使用golang:alpinealpine ,或在上面的评论, scratch提到生产。

为什么不划伤或centurylink ?

您可以构build一个静态二进制文件并将其复制到泊坞窗图像中。

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

假设你的二进制文件叫main ,这就是你需要的Dockerfile

 FROM centurylink/ca-certs ADD nina / CMD ["/main"] 

请记住, scratchcenturylink是空白的图像,所以你必须静态编译你的应用程序,内置的所有库。

例:

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

在这里你可以find一些额外的信息关于docker,去和从头开始, 在这里你可以find关于GOOS值的一些信息。