无数的文章、社交媒体在探讨Docker、Kubernetes、Mesos三者之间孰优孰劣。假如你听信了某些一知半解者的言论,你大概会认为这三个开源项目正在为争夺容器霸权而殊死战斗。同时,你也会相信,在这三者间的选择无异于对其所奉宗教的信仰,并且真正的信徒敢于斗胆和异教徒作斗争,而且拥护本身的信仰。
那些都是扯淡。
固然这三种技能都可以利用容器来陈设、打点和扩展应用措施,但实际上它们每个都偏重办理差异的问题,而且扎根很是差异的情况之上。事实上,这三种被遍及回收的东西链互相完全差异。
与其较量这些快速演进的技能的重叠特性,不如让我们回首一下每个项目标原始任务、架构以及它们之间如何彼此增补和交互。
让我们从Docker开始
本日的Docker公司脱胎于一个平台即处事的初创公司dotCloud。dotCloud团队发明,在很多应用措施和客户之间打点依赖干系和二进制文件需要做大量的事情。因此,他们将Linux cgroups和namespaces的一些成果组合成一个简朴易用的包,这样应用措施就可以在任何基本设施上一连运行。这个包就是Docker镜像,它提供以下成果:
1.将应用措施和库封装在单个包中(Docker镜像),因此应用措施可以跨多情况一致陈设;
2.提供雷同于git的语义,譬喻“dockerpush”,“docker commit”,这样可以让应用措施开拓人员可以轻松地回收新技能,并将其融入到现有的workflow中;
3.将Docker镜像界说为不行变层,启用不行变的基本设施。提交的变动被存储为一个单独的只读层,这让镜像复用和跟踪变动变得越发容易。别的,层还可以通过传输更新而不是整个镜像来节减磁盘空间和网络流量;
4.通过利用可以姑且存储运行时变动的可写层来实例化不行变映像,从而利便快速陈设和扩展应用措施的多个实例。
跟着Docker的风靡,开拓人员开始从条记本电脑转移到在出产情况中运行。这就需要借助东西来协调这些容器,我们称为容器编排。有趣的是,Apache Mesos的马拉松称为其时(2014年6月)第一个支持Docker镜像的容器编排东西(我们将在下面具体描写它)。就连Docker首创人、首席技能官Solomon Hykes也推荐Mesos为“出产集群的黄金尺度”。不久之后,除了马拉松之外,很多容器编排技能呈现了,这个中包罗:Nomad、Kubernetes、DockerSwarm(此刻是Docker引擎的一部门)。
跟着Docker开始贸易化开源文件名目,该公司也开始引入东西来增补焦点Docker文件名目和runtime引擎,包罗:
1.Dockerhub
2.Docker registry
3.Docker cloud
4.Dockerdatacenter
Docker让开拓者可以打包他们的应用以及依赖包到一个可移植的容器中的特性,使其成为软件行业的游戏法则改变者;这有点雷同mp3名目辅佐重塑了音乐财富。Docker文件名目成为行业尺度,而且率领容器技能供给商(包罗Docker、Pivotal, Mesosphere以及其他很多)创立CNCF和OCI。本日,CNCF和OCI的方针就是确保跨容器技能的互操纵性和尺度化接口,并确保利用任何东西构建的Docker容器,都可以在任何runtime或基本设施上运行。
谷歌很早就认识到Docker镜像的潜力,并试图在谷歌云平台上交付“容器编排即处事”。谷歌在容器方面有富厚的履历(他们在Linux中引入了cgroups),可是现有的内部容器和像Borg这样的漫衍式计较东西与它们的基本设施直接耦合。因此,谷歌没有利用现有系统中的任何代码,而是从新开始设计了Kubernetes,以编排Docker容器。Kubernetes于2015年2月宣布,并提出以下方针和思量:
1.为应用措施开拓人员提供一个强大的东西,用于Docker容器编排,而不必与底层基本设施交互;
2.跨云情况下,为一致的应用措施陈设履历和APIs 提供尺度陈设接口和原型;
3.构建一个模块化的API焦点,答允供给商环绕焦点Kubernetes技能集成系统。
停止2016年3月,谷歌向CNCF捐赠了Kubernetes,至今谷歌仍是该项目标主要孝敬者(其次是Redhat、CoreOS等)。
Kubernetes对应用措施开拓人员很是有吸引力,因为它淘汰了对基本设施和操纵团队的依赖。供给商也很是喜欢Kubernetes,因为它提供了一种简朴的方法来让他们拥抱容器举动,并为他们运行本身的Kubernetes陈设提供一个贸易化办理方案。Kubernetes之所以很有吸引力,因为它是CNCF下的开源项目,与Docker集群对比,后者固然是开源的,但却受到Docker Inc .的严格节制。