使用什么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 - 职业打杂儿,业余编程……

赞同来自:

原生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 -

赞同来自:

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

tianzong

赞同来自:

https://github.com/hesion3d/slimage
可以看看这个项目,里面链接了两篇文章不错

songtianyi

赞同来自:

gentoo,自己编译linux

zensh - https://github.com/zensh

赞同来自:

直接编译 linux 版本塞到 scratch 空镜像就行了。


可参考 https://github.com/zensh/ipservice docker 镜像不到 10MB

appleboy - https://github.com/appleboy

赞同来自:

用 linux 編譯出來的版本塞到 scratch 就可以了


https://github.com/appleboy/gorush/blob/master/Dockerfile

RedMothball - Golang & Docker

赞同来自:

scratch没有shell的呀,如果在容器运行时,就没办法exec进去调试了。


还是alpine吧,比二进制文件大几MB


alpine需要修复一下x64的库,然后用就好了


FROM alpine:latest
MAINTAINER zyfdegh <zyfdegg@gmail.com>

WORKDIR /root

# fix library dependencies
# otherwise golang binary may encounter 'not found' error
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2

COPY bin/deployer /root/deployer

CMD ["./deployer"]

adolphlwq - github.com/adolphlwq

赞同来自:


  1. 如果项目有外部依赖(比如调用linux外部命令),使用alpine,安装上相关依赖把golang binary add进去。

  2. 如果没有依赖,使用scratch,直接把binary add进去。


这里有一个例子参考:docker-minimal-go-apps

要回复问题请先登录注册