golang的杀手级应用:docker

标签: golang 杀手 应用 | 发表时间:2014-11-14 16:00 | 作者:草依山
出处:http://jser.me

docker 是 golang 的第一个杀手级应用,发展迅猛, 现在各大云计算平台几乎全都支持 docker 实例,包括 谷歌,亚马逊,阿里云等。 golang 本身已经让我惊喜万分,而 docker 更是极大的激发了我对虚拟化的想象。

关于软件和硬件

IT 业发展至今,软件和硬件始终是无法分割的两个物体。 就拿最近几年红红火火的智能机时代来说, 很久之前的诺基亚智能机, 软件和硬件相辅相成, 连进入主界面都需要按一个特定的按钮才能进入。 软件的操作都严重依赖键盘等按键。 体验非常不好, 对软件设计人员的约束也很大。

而苹果 iPhone 横空出世的时候, 最大限度的让你忘记硬件, 硬件主要只剩下一个 home键 和 可触控玻璃。 就是这样的 home键 和 触摸屏 组合, 大大的释放了软件开发人员的想象力, 自由的设计不同的软件交互风格。 从而让手机应该爆发式的增长。

两个最关键的概念: 镜像和容器

好像说跑题了,回到 docker , docker 是一种虚拟技术, 很多文档都说的云里雾里让人摸不着头脑, 但是按我的理解其实就是主要分为两个层次, 第一层是 【镜像(image)】 , 第二层是 【容器(container)】。 他们两者是互相转化的关系, 前者是一种【过去式】,后者是【进行时】, 镜像就好像是 git 的 tag 标签,是已经打上烙印, 是可以回滚回去的。 后者就是正在运行的状态,是基于镜像的。

比如我们对镜像 ImageA(镜像 ImageA 是静止状态)启动起来, 启动后就变成了 ContainerA 容器(运行状态), 当我们对该容器进行了修改(比如在该容器中运行了 sudo apt-get install cmake), 则该容器 ContainerA 和初始的镜像 ImageA 会出现了差异, 然后我们可以将该容器 commit 成另一个镜像 ImageB 。 这样下次在需要装有 cmake 的容器时,我们可以直接基于 ImageB 启动(run) 出一个 ContainerB , 这样 ContainerB 就自然而然已经装好了 cmake 这个软件。 而且各种容器互不干扰,每个容器其实就对应着一个虚拟机, 也就是在同一台物理机上面我们可以虚拟机 N 个虚拟机(N个容器)。

更具体的学习手册请看 【 Docker从入门到实践】。

一劳永逸的软件部署

docker 对软件部署非常的友好, 比如我们之前装了一个 cmake , 而今天我们需要搭建一个集群,有N台虚拟机,每个虚拟机都需要 cmakeclang。 则我们只需要对之前的 ImageB 启动一个容器 ContainerC (ContainerC 本身已经带有 cmake), 然后装上 clang ,然后再将 ContainerC commit 成 ImageC 。 这样 ImageC 就带有 cmakeclang 。 所以我们直接基于 ImageC 启动 N 个容器 (ContainerC1 ContainerC2 ... ContainerCN)。 就是环境一摸一样的N台虚拟机。 而不是之前的一台一台重复性的安装软件。 甚至对于以前让运维煞费苦心的软件依赖等问题, 现在也都可以通过不同镜像的叠加,轻松搞定。

tag就是最好的后悔药

可能很多人会想,如果只是为了避免重复性的安装操作。 可以将安装操作换成脚本即可。 但是假设如果我们的安装脚本出错了, 出现了误操作或者装错了软件版本导致兼容问题了怎么办? docker 也可以非常好的解决这个问题, 因为有镜像的缘故,每个镜像都是另一个镜像演化而来的, 而且每个镜像可以打标签, 所以回滚也非常的容易,如果我们有一个镜像叫 YanyiwuImage:v1 。 当下次讲 container commit 到 YanyiwuImage:v2 。 让我们发现 YanyiwuImage:v2 出错了,我们可以很轻易的回滚到 YanyiwuImage:v1 。 回滚也就是 image 支持标签的意义所在。 就像 git 版本管理一样,保存那么多 commit 信息就是为了更好的回滚。 告别以前动不动就需要重装系统,从头来过的软件部署之殇。

也可以防止一些误操作,比如当你的服务器上面有一个文件存储服务, 因为误操作上传了一些文件, 因为有了 docker 的回滚,直接一键回滚, 也就省去了一个个删除误上传的文件的麻烦事。

对测试更加友好

当我们开发系统级软件服务的时候, 就拿即时消息推送服务来说, 在测试推送服务的性能的时候, 我们经常需要调整 linux 系统参数来进行测试。 而我们很可能一不小心测试完后忘了将参数调整复原。 甚至也很容易忘了我们究竟修改了哪些参数。 这时候如果是在 docker 里面,因为 docker 支持回滚。 我们只需要回滚一下,即可回到过去。 大妈一分钟变萝莉。 世界还是那么美好。 测试时调整参数再也不需要那么提心吊胆和小心翼翼。 就像有句广告词说的,有了 docker 之后,怎么调整参数都不怕侧漏。

回滚还可以防攻击

当你的服务器遭受病毒之后,你所需要的先是切断掉该服务器和其他服务器的连接。 然后就是杀毒了,但是有时候病毒很难找出来,一般是重装系统来搞定。 但是有了 docker 之后,直接回滚即可,后悔药就是这么好喝。

总结

对于回滚的良好支持再加上镜像可以层层叠加, 光是这两者就可以组合出各种巧妙的应用。 再加上启动迅速,容器轻量, 轻松甩了其他虚拟机好几条街。

参考

相关 [golang 杀手 应用] 推荐:

golang的杀手级应用:docker

- - _不是我干的 _
docker 是 golang 的第一个杀手级应用,发展迅猛, 现在各大云计算平台几乎全都支持 docker 实例,包括 谷歌,亚马逊,阿里云等. golang 本身已经让我惊喜万分,而 docker 更是极大的激发了我对虚拟化的想象. IT 业发展至今,软件和硬件始终是无法分割的两个物体. 就拿最近几年红红火火的智能机时代来说, 很久之前的诺基亚智能机, 软件和硬件相辅相成, 连进入主界面都需要按一个特定的按钮才能进入.

Golang测试技术

- - Tony Bai
本篇文章内容来源于 Golang核心开发组成员 Andrew Gerrand在Google I/O 2014的一次主题分享“ Testing Techniques”,即介绍使用Golang开发 时会使用到的测试技术(主要针对. 单元测试),包括基本技术、高级技术(并发测试、 mock/fake、竞争条件测试、并发测试、内/外部测 试、vet工具等)等,感觉总结的很全面,这里整理记录下来,希望能给大家带来帮助.

gocode——VIM 和 Emacs 的 golang 代码自动补全

- XiaoHui - Some reminiscences, some memories
虽然 golang 自身提供了 VIM 的语法高亮之类的脚本,但 autocompletion 并没有官方解决方案. 无意之中发现 gocode 这个支持 VIM 和 Emacs 的 autocompletion daemon. 这里有个Flash 动画演示,展示了 gocode 的强大. 我得说,用过之后,感觉速度确实够快.

windows 下搭建 GoLang 语言开发环境

- - haohtml's blog
golang官方二进制分发包包括FreeBSD, Linux, Mac OS X (Snow Leopard/Lion), and Windows等平台,包括32位、64位等版本. 我自己使用的是windows 32位分发包,MSI格式的,下载地址为: http://code.google.com/p/go/downloads/list.

[转][转]Golang适合高并发场景的原因分析

- - heiyeluren的blog(黑夜路人的开源世界)
来源: http://blog.csdn.net/ghj1976/article/details/27996095. 我们先看两个用Go做消息推送的案例实际处理能力. 16台机器,标配:24个硬件线程,64GB内存 . 单机80万并发连接,load 0.2~0.4,CPU 总使用率 7%~10%,内存占用20GB (res) .

应用杀手iOS 5即将消灭的15大应用

- bill - cnBeta.COM
iOS 5包含了一系列新功能,其中包括Notification Center, Reminders, iMessage, Cards等新应用,这可能会取代一系列流行第三方应用的江湖地位. 让我们看看在iOS5的这次更新后,哪些应用会成为iOS 5的刀下冤魂吧.

15个你未知的 Chrome 浏览器杀手级应用

- Howard - cnBeta.COM
之前写过一篇我为什么使用Google Chrome浏览器,算是在使用了一段时间的Google Chrome后的一点粗浅认识,最近读到一篇文章15 Killer Google Chrome Features You Might Not Know About,感觉很是惊讶,原来Chrome还有如此多的实用功能是我所不知道的,在这15个功能中,我知道的仅仅是那个复制并粘贴的功能,所以,翻译了这篇文章:.

【转载】开发杀手级企业应用10规则

- - HTML5研究小组
卓越的企业级App要7*24小时在线,保持机警,能帮助员工抓住每一个机会. 你也许认为你和你的团队都已经拥有了个人电脑. 但是根据 Lextech Global Services(一家移动app设计与开发公司)的CEO  Alex Bratton的说法,你并没有真正拥有. Brathon说:“如果安装了合适的app,移动设备就是首要的真正的个人电脑:可以装在口袋里,7*24小时可用,最重要的是,移动设备不是为大众市场而设计的,而是为你的个人需求而设计的.

三大应用性能隐形杀手:谁Kill了你的App?

- - IT耳朵
对于移动开发者来讲,活跃用户流失=应用慢性死亡. 当你的创意、用户体验和coding都无懈可击时,是谁在不知不觉中Kill了你的App. 听云平台根据真实数据统计:“连接超时”、 “崩溃”和“CPU使用问题”正是Kill掉你的应用的三大隐形杀手. 根据听云平台统计,网络错误是App关闭的首要问题,而在移动应用中网络错误数据比例报错中最高的就是连接超时错误.