分类: LINUX
2015-03-04 19:06:56
注:本文首发于CSDN,转载请标明出处。
【编者按】在“漫步云端:CoreOS实践指南”系列的前几篇文章中,ThoughtWorks的软件工程师林帆主要介绍了CoreOS及其相关组件和使用。说到CoreOS,不得不提Docker。当Docker还名不见经传的时候,CoreOS创始人Alex就凭着敏锐直觉,预见了这个项目的价值,将Docker做为了这个系统支持的第一套应用程序隔离方案。本文将主要介绍在具体的场景下,如何在CoreOS中恰当的管理Docker容器。
作者简介:
林帆,生在80后尾巴的IT攻城狮,ThoughtWorks成都办公室CloudOps小组成员,平时喜欢在业余时间研究DevOps相关的应用,目前在备考AWS认证和推广Docker相关技术。
这次的主角终于轮到了大鲸鱼Docker。不晓得有多少人是因为Docker认识了CoreOS的,至少它在社区的知名度事实上高于CoreOS项目本身。这篇文章里不会对Docker做很深入的讲解,而重点放在开始使用Docker所需的基本知识以及在CoreOS中使用Docker托管服务的推荐实践方法。
雷教主说,“站在风口上,猪也能飞起来”。Docker正是借着云计算的风飞上了天。伴随着Docker和应用容器的兴起,拉动了一批PaaS产品的发展,而CoreOS也借了这股劲儿赚足了人气,进行得风生水起。同时CoreOS的成熟也在回馈Docker社区,为社区带来了例如Etcd、Deis(私有PaaS云平台,目前是基于CoreOS构建的)等许多新的活力。
说起CoreOS与Docker的渊源,确有一段历史了。故事大致是这样开始的,2013年2月,美国的dotCloud公司发布了一款新型的Linux容器软件Docker,并建立了一个网站发布它的首个演示版本(见Docker第一篇官方博客)。而几乎同时,2013年3月,美国加州,年轻的帅小伙Alex Polvi正在自己的车库开始他的 第二次创业。此前,他的首个创业公司Cloudkick卖给了云计算巨头Rackspcace(就是OpenStack的东家)。
有了第一桶金的Alex这次准备干一票大的,他计划开发一个足以颠覆传统的服务器系统的Linux发行版。为了提供能够从任意操作系统版本稳定无缝地升级到最新版系统的能力,Alex急需解决应用程序与操作系统之间的耦合问题。因此,当时还名不见经传的Docker容器引起了他的注意,凭着敏锐直觉,Alex预见了这个项目的价值,当仁不让地将Docker做为了这个系统支持的第一套应用程序隔离方案。不久以后,他们成立了以自己的系统发行版命名的组织:CoreOS。事实证明,采用Docker这个决定,后来很大程度上成就了CoreOS的生态系统。
现在看来,CoreOS已经不是唯一预装了Docker的操作系统了,但它是第一个,也是目前做得最成功的一个。RedHat和Canonical(Ubuntu的母公司)随其后也分别推出了自己的预装Docker的系统发行版,但知悉者寥寥,并没有做成气候。其项目发起时间见下图(出自成都ThoughtWorks技术雷达分享活动),Atomic和Ubuntu Core Snappy分别是RedHat和Canonical公司推出的预装Docker的操作系统,目标也都是直指服务器集群和容器化部署。
“应用容器”现在对许多人已经并不陌生了。但它在服务器的系统上还不是那么普及,至少与你手上的智能手机系统相比。至今在服务器系统上流行的安装软件方式依然是编译源代码、手工的安装包或各种包管理工具,虽然包管理工具的出现解决了应用软件安装、卸载以及自身依赖等诸多问题,却无法很好的解决软件之间的依赖冲突。而早在Docker诞生以前,“沙盒”的概念已经被普遍使用在Android、iOS等主流的手机系统中了。通过沙盒的隔离,应用软件将自己所有的依赖与应用本身打包在一起,并通过SDK API提供的可控的方式访问操作系统,软件与系统的耦合度大大降低。这样带来的直接好处是,软件之间的依赖冲突得到了很好的解决,移除一个应用软件一般只需要很短的几秒钟并且彻底无痕,软件访问系统的安全性也更加可控。
事实上,Android实现沙盒同样的基于Linux内核的cgroup和namespace机制用于限制和隔离资源的使用,所使用的技术与Docker如出一辙。这些早在Linux 2.6.x版本就已经加入了的新特性,已经通过了较长时间的检验,被证实是可行并且可靠的。
这篇文章里不会专门介绍Docker的使用,而是关注在具体的场景下,如何在CoreOS中恰当的管理Docker容器。了解过Docker在CoreOS生态系统中的角色后,下面通过在两个容器中分别运行NodeJS和MongoDB的例子说明如何在CoreOS中通过Systemd管理服务,并在此基础上快速浏览一些基本的Docker命令。
事实上,随着CoreOS的独立容器项目 Rocket 的发起,Docker 在未来将不再是 CoreOS 和其他Linux操作系统设计容器方案的唯一选择。但作为 CoreOS 乃至整个 Linux 生态圈的应用容器服务佼佼者,Docker的王者地位还会持续很长的时间,而CoreOS始终会保持对Docker容器的一流支持(见CoreOS关于Rocket博客中的F&Q)。