Alpine里的go应用,你猜他能有多小?

涨薪!涨薪!涨薪!时下Docker技术已经成为最流行的一个涨薪理由了。利用Docker容器技术,能够开发具有独立性的代码,构建一个非常完美的微服务运行环境,让微服务不在受限于臃肿的虚拟机。希云作为Docker私有云的领导者,利用Docker提供更好的云计算产品和培训、咨询等服务!

我们刚接触Docker时,最常见的入门方式是使用Ubuntu或Debian等系统构建虚拟机,这种方式的弊端是产生的镜像太大了,单单是Ubuntu的基础镜像就已经有187.9MB,而且大部分装好的软件和依赖库都不会用到。

容器和虚拟机的主要区别在于,容器在宿主系统的一个隔离进程空间里边运行,因此它不需要有独立的内核和其他系统文件,只要在上边安装你需要使用的东西,我们会需要Python来运行Go的服务吗?这不是一个很难回答的问题。

—微基础镜像—

首先我们要抛弃使用Ubuntu或者Debian作为基础镜像这种思路,我们着眼于更轻量的选择。

Alpine Linux是一个微型的Linux分发版,可以用来构建一个体积只有5M的基容器,它是基于一个嵌入式系统BusyBox改造的。那为什么不直接用BusyBox呢?使用Alpine有几个优点,首先,Alpine上有一个包管理系统apk,使用它可以简化容器的维护;第二,Alpine的内核已经被打上PaX补丁,可以免受大量0 day漏洞的侵害。

你可以在以下列表看到,Alpine只在BusyBox的基础上增加了4.1MB的体积,但是同时相应增加了那些便利,我觉得这部分开销非常值得。

镜像体积

ubuntu187.90 MB

nicholasjackson/microservice-basebox15.82 MB

alpine5.24 MB

busybox1.10 MB

—为Alpine Linux编译Go应用—

使用Go来构建微服务的一个优点是,它会被编译成二进制包,这样的话,它就不需要框架或者运行依赖,这样非常有利,因为正如前面所说Alpine是一个非常轻量级的分发版,并不是所有C语言依赖库都有安装,所以Go的动态库依赖很可能也没有。所幸的是有专门的方法去禁用了cgo依赖,可以把应用通过链接的方式编译,我们只需要这样告诉编译器去重新构建我们的所有应用包就可以了:

$ CGO_ENABLED=0go build-a-installsuffix cgo .

我们更详细说一下上边这个命令的细节:

CGO_ENABLED=0 是一个编译标志,会让构建系统忽略cgo并且静态链接所有依赖;

-a会强制重新编译,即使所有包都是由最新代码编译的;

-installsuffix cgo 会为新编译的包目录添加一个后缀,这样可以把编译的输出与默认的路径分离。

—运行应用—

那么,在二进制包里怎么使用配置文件呢?如果是在使用微服务架构,那很可能在使用Consul,如果还没有的话,那真的应该好好研究一下它,它确实很强大。在本文中,会假定你已经熟悉Consul,你在使用这个Consul模板去管理你的配置文件。

通常需要使用监护进程来运行这些服务,例如Supervisor,不过这个工具需要使用Python,这有违我们轻量级的初衷,所以我们使用Skaware S6

S6是一个简单有效的工具,它使用/etc/s6下的配置文件,来启动s6-svscan进程。可以从我的基镜像仓库中看到,这个目录下包含了一系列的shell脚本。

—.S6-svscan—

这个目录包含两个脚本”crash”和”finish”,当s6所管理的应用由于错误终结时,crash脚本会被调用,当s6进程关闭时,finish脚本会被调用。

—App—

这个目录包含”run”和”finish”两个脚本,run用来启动主服务,并且会被配置上Go应用的执行路径。而在finish中可以设置应用程序关闭时要执行的脚本。

—Consul-template—

这个目录同样也是包含了那两个脚本,但是这次它是用来配置consul-template应用的,consul-template生成微服务所用到的配置文件,相关配置文件会被储存在Consul服务端上,在Go微服务的整个生命周期中,Consul应用都需要运行着提供配置服务,所以我们也要通过s6来监控守护它。

—Docker基础镜像—

为了方便测试,已经使用Alpine来构建了一个带有Skaware S6和Consul Template的镜像,这个新的镜像也是只有15.82MB。即使你基于这个镜像构建一个再臃肿的应用,那也估计不过30MB左右,但是这样还是只有一个Ubuntu基础镜像体积的13%。

—结论—

在本文中,希云主要和大家讨论了Go应用,但可以基于类似的技术使用在Ruby或Python上,Alpine 的apk已经提供这两种语言的相关依赖包,另外,也可以尝试着在上边部署一个JRE环境。

感谢您阅读此文!下周二我们将继续分享docker精品文章,请保持关注!

如了解更多docker相关知识,请观看培训视频:https://csphere.cn/training!

如需要docker相关产品,请访问希云官网首页:https://csphere.cn!

Docker技术如何落地企业带来价值

希云是Docker领域的专家,致力于通过Docker技术提供更好的云计算产品和服务。希云品牌下的产品包括了

COS容器操作系统

cSphere容器管理平台

CDT基于容器的开发测试平台

CShow基于容器的项目演示平台

CHub企业版Registry

并提供相关的培训和咨询服务

微镜像服务

Docker企业培训

应用Docker化咨询

软件SaaS化咨询

PaaS化咨询

欢迎企业垂询:

电话:400-6546-166

邮箱:partner@csphere.cn

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容