如果你是一名运维工程师,你就会知道Docker公司的估值已超过10亿美元,而且Docker是最受关注的技术品牌之一。Docker容器被称为容器运行时的事实标准,但是Google公司的Kubernetes正在赢得编排框架市场的胜利。在使用容器技术时,我们经常会遇到这样一个问题,“使用Kubernetes会伤害Docker吗?”
许多人认为容器技术的价值在编排层,这是Kubernetes对Docker容器的直接威胁。然而我不认同这个观点,因为Docker不是一家容器运行时公司,而是一家容器平台公司。要理解这个概念,我们必须了解Docker公司的历史。
Docker公司曾是一家名为dotCloud的公共云PaaS(平台即服务)公司。所有的PaaS解决方案都可以利用容器封装来执行复杂的任务,例如实时迁移,以便可以快速部署软件,而不需要用户离线系统或停机。2013年,dotCloud公司开源了其基础容器技术,称为Docker项目。与此同时,一个大型技术社区产生了,dotCloud从一家纯粹的PaaS公司转型成为一家名为Docker的容器平台公司。
在接下来的两年中,Docker公司筹集了1.9亿美元,并阐述了容器即服务(CaaS)的概念。首席技术官Solomon Hykes指出,PaaS的最大挑战之一是开发人员往往过于规范。CaaS的理念是用户可以将相关的组件容器化,并在Docker产品和服务的帮助下,搭建一个由容器化组件构成的非规范性平台。这样,开发人员就从基础的IT管道中抽象出来,不再被PaaS供应商提供的技术所捆绑。转向CaaS使得Docker成为容器平台公司,而容器只是一种工具。
一旦拥抱了容器,用户就需要一个编排框架来调度和管理容器。最常见的编排框架有Kubernetes、Mesos、Docker Swarm。Kubernetes是目前市场上最成熟的、最具扩展性的解决方案,占有最大的市场份额。上述三个编排框架都开放源代码,用户只需为技术支持服务付费。
Kubernetes与Docker容器之间,并不是苹果与苹果的比较,你不能将业务流程工具与平台对比。Kubernetes是Google公司多年来用于大型集群管理的基础技术,它于2015年7月发布。之后的DockerCon 2016上,Docker公司宣布了具有业务流程功能的Docker Swarm。Docker Swarm的一个优点是与Docker平台中的许多安全功能集成,如密钥管理。在容器规模较小的场景下,许多用户更喜欢使用Docker Swarm,因为它平滑地内置于Docker平台中。
到目前为止,编排框架竞赛的获胜者是Kubernetes。这使得许多人认为Kubernetes对Docker容器造成了很大的威胁。在DockerCon 2017上,Docker公司发布了Moby项目,它是一个基于容器平台(CaaS)的组装框架。Moby项目使得用户可以用喜欢的组件来创建定制化的平台。从下图可知,编排框架只是容器平台(CaaS)的一层。
Docker容器不关心用户使用哪种编排框架,它的工作是让用户轻松地选择最喜欢的编排框架,无论Kubernetes、Mesos、Docker Swarm还是其他。这个选择在价值上无关紧要,真正的价值在于平台,那才是钱。因此,将Kubernetes与Docker容器进行比较是没有意义的,Docker的真正的竞争对手是VMWare、CloudFoundry等平台。
在Twitter上,我们看到Google公司的Kelsey Hightower与Docker公司的Solomon Hykes之间喋喋不休,但是我相信Kelsey对于Docker容器缺乏开放性的建设性批评,有助于推动其将Kubernetes作为容器平台编排层的可行性选择之一。如果这样,Google公司就不再是容器生态的敌人,更多的是合作伙伴。
Docker公司的资金收入来源于技术支持服务,生产中运行的Docker容器越多,技术支持服务的收入就越多。对Docker公司来说,重要的是Docker容器使用率的提升。显然,Kubernetes是最受欢迎的编排框架,被用于驱动大规模的容器应用,而Kubernetes可以使更多的Docker容器投入生产。
在我看来,Kubernetes不是Docker容器的杀手,而是推动者。更进一步地说,编排框架是容器平台的商品,它会驱动容器运行时的使用。编排框架是容器平台的关键组成部分,它与容器运行时是朋友,而不是敌人。