容器霸业:2 谁主沉浮

317 阅读8分钟

容器

Docker 的大热也把一个名词迅速传播给了广大的程序员群体:容器。

何为容器?海纳百川,有容乃大。在编程界,容器是一系列相似功法的统称。容,包含万物,器,取用随心。容器的概念由来已久,这个概念并不是 Docker 首创的,却随着 Docker 广为流传,甚至有的新手入行,以为容器即 Docker,Docker 即容器。

“大师兄,听说现在有种新的容器功法,特别厉害,而且还是公开的,要不我们也练练?” 小刀一早就跑到大师兄的旁边问到。

见大师兄没有理会,小刀继续说到:“好像叫什么~Docker,对,叫 Docker!现在可流行啦~”

大师兄仍旧不语,心想:虽然我们门派不大,但是我作为门派大师兄,岂能震不住这种初出茅庐的小师弟。

“为何如此兴奋?”大师兄故意压低了语气,缓缓说到:“你知道何为容器?”

“就是 Docker 能创建一个隔离的虚拟环境,和虚拟机一样,但是比虚拟机更快更轻。” 小刀马上说到。

“胡说!不要看了点小报就瞎传。现在可是练功时间,一会掌门来了!” 见小刀回到了自己的位置,大师兄赶紧悄悄地搜索起来。

午休时间,小刀又和众师兄弟们聊起了容器功法。大师兄恰巧路过,看到大家聊的火热,上前问到,“你们可知这 Docker 和容器的渊源?”

"容器就是 Docker 启动的进程!",小刀一听可来劲了,想把这两天从编程小报上看的内容都说出来,“有了 Docker,应用就可以像货物一样到处搬运,到处运行了。”

“不要只看皮毛,你可知这容器功法早就有了。”大师兄侧身看向远方,余光却瞟向小刀。

“这......”小刀欲言又止。

大师兄抢先说到:“早在 1979 年,Unix 中引入了 chroot 功法,这个功法能让修炼者修改进程及其子进程的根目录,创建一套独立的文件空间。不过当初此功法比较简单,也未考虑安全因素。”

“这也太早了吧,那时候我还没出生呢!”一个弟子说到。

“而后,FreeBSD 系统在 2000 年为 chroot 引入了 Jail,通过 Chroot Jail 相关的功法,在这个根目录下的进程,就处于一个隔离的环境中,就如同在「监狱」一样。”大师兄接着说。

如果想要修习,秘籍就在参考文献,小心走火入魔。

“Linux 系统也在 2001 年推出了自己的 Jail「监狱」:Linux VServer。它能够把资源划分成一个个区域,称为安全上下文,security context,而其中的虚拟系统,被称为虚拟私有服务器,virtual private server,VPS。”看大家听的津津有味,大师兄继续说,“技术巨人 Sun 门派,在 2004 年也在自家的 Solaris 系统中推出了 Solaris Containers,两者异曲同工。随后一年,Linux 上又出现了 openVZ,通过对内核注入补丁,提供了更完整的隔离支持。”

“这个我知道,Sun 门派后来被 Oracle 门派兼并了。”一个双下巴的弟子兴奋地说到。

大师兄瞟了他一眼,继续说:“容器功法的发展肯定少不了各大门派的力量,Google 门派的 CGroups,Control Groups,在 2007 年并入了 Linux 内核,此功法可用于限制一组进程的资源使用,比如 CPU,内存、IO。”

“CGroups 不就是 Docker 的......”小刀刚说出口,就立刻闭了嘴。

“Docker 确实建立在 CGroups 功法之上,不止 CGroups,还有其他的功法,且听我往下说。”大师兄看向小刀,接着说到。

“其实 Google 早就已经偷偷研习「容器」功法了,在 Google 内部,「容器」就是指被 CGroups 管理的一组进程。”大师兄继续说。

“Google 门派果然在容器功法上贡献很多啊!” 双下巴的弟子用手托着自己的下巴,若有所思的说到。

“在 2008 年,第一个完善的 Linux 容器方案 LXC 问世。LXC 即 LinuX Container,由 Canonical 门派研发,结合了 Linux Namespace 和 CGroups 功法,提供了完善且无需补丁的容器之术。”

“Canonical 是什么门派,怎么没听说过?” 一个弟子问到。

“Canonical 都不知道,你的 Ubuntu 白用了!”一个戴眼睛的弟子马上抢话道,“大师兄,你接着说。”

“嗯。Cloud Foundry 联盟也在 2011 年推出了 warden,目标是为任何操作系统提供隔离的环境,而不仅仅是 Linux。不过,早期的 Linux 版 warden,也是基于 LXC 修炼而成的。”

“此外,Google 门派的另一大贡献就是 lmctfy,Google 容器栈的开源实现,后来合并到了 libcontainer,也就是如今的 runc 中了。”

“到了 2013 年,你所说的 Docker 功法才流传开来。”大师兄拍拍小刀的肩膀,“不过说真的,它确实很好用,所以这么流行。”

“哦~原来还有这么一段历史。”小刀说到。

“大师兄知道的可真多,让我们受教了。”眼睛师兄说到。

“是啊是啊!”其他师兄弟附和道。

“好了,午休时间差不多了,都回去练功吧。”大师兄说完,转身走了,众弟子也逐渐散去。

小刀心想:大师兄果然是大师兄啊,我还得多向他讨教才行。

镜像

“大师兄!”下午的内功研习会过后,小刀拉住大师兄,轻轻地问道,“这个容器我还有一事不明,想要请教一下大师兄。”

“你说吧。”大师兄看了眼时间,说到,“一会我还要去和几位长老汇报。”

“就是既然容器功法都已经发展这么多年了,像 Cloud Foundry 等联盟把 Paas 也搞的火热,为什么 Docker 还能一下这么火呢?”小刀赶紧问道。

“这就要说到让广大程序员最头疼的问题了。”大师兄说到,“对于应用开发的程序员来说,应用开发的什么环节最头疼?”

“是部署!”小刀立马脱口而出,“每次上线部署,都要和运维的师兄弟们搞半天,有一次还差点打起来。”

“对!即使是 Cloud Foundry 等 Paas 平台,也需要针对不同的语言,搞不同的部署脚本。”大师兄接着说到,“你还记得之前的独行侠-巴斯吗?”

“哦,就是那个修炼 Linux 内核功法的?”小刀想了一会说到,“他是真的厉害!”

“他确实很厉害,Shell 语言耍的非常溜。Linux 内核功力远在我们的掌门之上,当初掌门和几大长老,也想将他收入帐下,做内核功法的教头呢。”大师兄说到。

“还有这事?”小刀一脸诧异,“要是他来了,岂不是......”

“那为什么他没来呢?”小刀反问到。

“那就是为什么他叫独行侠了。”大师兄冷笑一声,说到,“他当初随掌门参观了师兄弟们的修习,提出了很多问题,把掌门问的哑口无言,随后他就扬长而去了。”

“我们的几个运维的弟子来给他演示,被他形容为:连 TCP 协议都整不明白,还敢来玩 Nginx。内核功法也是被他批评为:只有其表。”大师兄接着说到。

“内核功法深入确实很难,而且用处比较少。”小刀说到。

“所以 Docker 给了广大不熟悉内核功法的程序员一个机会,让他们也能自己快速部署一个应用。”大师兄感慨道,“从前需要半天的部署配置工作,现在一分钟就能完成,还没什么冲突问题。没有什么能比一分钟部署一个 WordPress 应用更令人兴奋了。”

“嗯,确实如此。”小刀说到,“以前,我想都不敢想,现在我也会自己部署应用了。”

“PaaS 的目标,就是让程序员只关注于业务。”大师兄说到,“但在 Docker 出现之前,这还只是一个美好的目标。”

“Docker 解决的是应用打包这个根本性的问题。它让广大的应用开发者从此解放了对内核的恐惧。”大师兄继续说,“同时,PaaS 的普及已经为广大的程序员做好了心理建设,他们需要的就是这样一个便捷而又轻量的方案。”

docker run -d -p 8080:80 nginx

“你看,一个命令就能从 Nginx 镜像启动一个 Nginx 容器,而且多个容器毫不干扰。”大师兄拍拍小刀的肩膀,说到,“正是 Docker 的镜像,将应用「标准化」,能够像商品一样批量生产,批量销售。”

“明白了,感谢大师兄教导!”小刀深鞠一躬。

“看你对这块很有兴趣,多去了解下。”大师兄说到,“我们门派也很快就会用到了,说不定到时,你就可以给师兄弟们讲习了。”

“对了,什么时辰了?”大师兄一看时间,“不好,掌门要削我了!”

小刀抬起头,大师兄已然不见了。

后记

Docker 如此神奇,又有什么秘传心法呢?

欲知后事如何,请看下回分解。

请关注「容器霸业」,知乎专栏同步更新。

上一章:容器霸业:1 群雄逐鹿

下一章:容器霸业:3 秘传心法

参考文献