使用什么docker image来运行Go程序

目前大家都是使用什么docker image来运行我们的Go程序啊,默认的golang包还是有点大,想尽量做到最小,大家有什么好的推荐吗?

已邀请:

astaxie - 创造、获取、分享、传播和应用Go

赞同来自: 7sDream niugou

@niugou @7sDream 你们这两个用法我感觉是不正确的,这个用来开发测试还行,发布的时候不建议把源码打包到image里面去。


最好是编译后的binary+小的镜像文件,看上去大家都是用原生的,alpine看上去很小,但是好像Go1.2开始依赖了CGO,而这个image不支持,但是还是可以使用netgo包来编译。大家可以详细的看看这里


http://stackoverflow.com/questions/36279253/go-compiled-binary-wont-run-in-an-alpine-docker-container-on-ubuntu-host

Archer

赞同来自: duanquanyong

我们是打包好生产的二进制直接放上去,而不是放到docker里面,感觉像Java,Node等才需要docker里面运行,因为那样对他们来说才方便。

niugou - 宁可十年不将军,不可一日不拱卒。

赞同来自:

从网上看到一个帖子中提到这个(FROM golang:1.6),也许可以试试。


http://www.open-open.com/lib/view/open1462542951394.html


补充官方地址:https://store.docker.com/images/3e4f3e51-3930-4dd8-975c-517705d9d4e7

boilingbit

赞同来自:

直接放alpine image里

7sDream - Forward.forward.

赞同来自:

codinghxl

赞同来自:

go 1.7 打出来的二进制包体积减少了20%多了

xieyanke - 学书,三试不中;学箭,及试中鼓吏,逐出;遂学IT,五年无一完目。

赞同来自:

原生linux image + 编译后的 golang binary

7sDream - Forward.forward.

赞同来自:

@astaxie


我那个项目本身是开源的,所以打包的时候就没管源码了……


如果是公司的生产环境的话可以参考下 DaoCloud 的安全镜像:


http://docs.daocloud.io/ci-image-build/daocloud-yml-2-0-preview#lite_image


如果不是用 DaoCloud 的话确实需要自己抽取一下 binary files 再 deploy

bopjiang

赞同来自:

如果go编译生成目标文件是静态链接的话(statically linked),是没有任何依赖的,是不需要任何linux基础镜像的吧。
直接放一个可执行文件到image就可以了
参考: https://blog.docker.com/2016/09/docker-golang/

cloverstd -

赞同来自:

打包好二进制文件再放到镜像里去,又没啥依赖

要回复问题请先登录注册