selectGolang泊坞窗基础图像
图像golang
和alpine
大小差异大约300Mb
。
使用golang
图像而不是普通的alpine
什么好处?
简单回答:比较golang:alpine
和alpine
之间的差异是比较公平的。
在写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:alpine
, alpine
,或在上面的评论, scratch
提到生产。
为什么不划伤或centurylink ?
您可以构build一个静态二进制文件并将其复制到泊坞窗图像中。
docker图像的大小将等于二进制文件的大小。
假设你的二进制文件叫main ,这就是你需要的Dockerfile :
FROM centurylink/ca-certs ADD nina / CMD ["/main"]
请记住, scratch和centurylink是空白的图像,所以你必须静态编译你的应用程序,内置的所有库。
例:
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
在这里你可以find一些额外的信息关于docker,去和从头开始, 在这里你可以find关于GOOS值的一些信息。