信息化,一个不可逆转的潮流,潮流之下,发展是一个亘古不变的话题。
IT界同样如此,半年一浪,三载一潮,技术的迭代之快令人咂舌。5年前的Hadoop,3年前的OpenStack,到如今之Docker,无一不是一浪高过一浪。说到发展,谈及热度,目前容器领域的新技术Docker,绝对是受到IT界前所未有的关注,因此也时常有人调侃:出门不知Docker,实乃IT从业人员难以启齿的隐痛。
作为三年前刚刚诞生的新生儿,Docker已然给云计算、应用交付等多个领域带来巨大的革新。细谈Docker,我们却发现,Docker背后的容器技术,其实并非首创,早在十数年前,容器技术便已有雏形,那究竟为何Docker的席卷之势空前之大。不论是技术领域有什么独到之处,还是时势造就了如今大好的局面,我们都没有理由不来细细品鉴Docker这三年来的种种发展。
狭义而言,Docker是一款轻量级容器的管理引擎软件。云计算时代,可以帮助用户轻松实现分布式应用的“Build, Ship, Run”。
广义而言,Docker是一家以容器服务为基础的硅谷公司,试图改变传统应用的构建与交付方式,创造应用模式的新时代。目前,从市场发展与技术影响而言,Docker凸显了极大的潜力。
回顾Docker的三周年,从技术的发展到公司的运营,从产品的布局到生态的建设,我们不由得感慨,下一个巨人是否就是这家logo是鲸鱼的公司。
三年前的云计算,提到最多的关键字无疑是IaaS(Infrastructure-as-a-Service,基础设施即服务)。企业往往通过IaaS技术建立起信息化的数据中心,有效地管理池化资源。如果历史的发展仅仅满足于此,那么科技也就会停滞不前。
当时,在加州湾区以Solomon Hykes为首的几位天才工程师就在尝试,能否在资源之上,架构出一套完善的分布式平台,有效快速帮助用户的应用系统平稳运行。他们的公司实体也就是Docker的前身dotCloud。经历了一段时间的试水之后,历史并未遂这群极客的愿,dotCloud云战略的运营并非成功。
然而,常言道,失败是成功之母,这句话印证在dotCloud身上再适合不过。失利的同时,Solomon敏锐地嗅探到了,dotCloud体系的中的容器技术,反倒是解决了目前市场上用户应用构建、分发和发布的诸多痛点。痛定思痛,Solomom迅速技术转型,开始投向容器技术,并从一开始就开源,当时就吸引了为数不少的开发者。
时间定格在2013年3月,容器技术定名为Docker,原力诞生。
诞生仅仅意味着不平凡的开始。后来的3年时间中,Docker立足技术,服务用户,培育市场,建立生态,发展历程可圈可点。
开源、轻量级、API标准,可以说是Docker在2013年起步时最重要的三大法宝。开源,吸引开发者,培养并壮大社区;轻量级,引发容器与虚拟机之间的众多思考,创新之下,带来的是对未来无限的想象空间;API标准,看似不经意,事实却帮助Docker大大降低了上手门槛,同时也在最早时间占领了重要的高地——用户的使用习惯。
新手的三板斧,着实有模有样。而后的一年之间,Docker的定位似乎异常清晰,那就是围绕镜像,围绕Docker Hub,构建全球最庞大的镜像仓库。信息化时代,时常传有这样的一句话:技术可以复制,而数据无可复制。Docker Hub这个镜像仓库越是庞大,意味着Docker的用户群体的数量越惊人。
2015年初开始,Docker一直谋求在企业生产环境中有所突破。随着社区的壮大,Docker Engine的发展也异常的快。Engine在逐渐成熟的过程中,经历了多次蜕变。Engine自身架构模块化的发展;在内核级别保障Docker化应用更高的隔离性;存储方面支持更多的驱动,如:aufs、devicemapper、BtrFS、overlayFS、ZFS等;同时在日志管理等方面逐渐集成第三方优秀产品。Engine功能的完善与稳定性提高,是Docker生态的一大基石。在此基础上,Engine上层的容器编排工具(Compose)与集群管理工具(Swarm)迅速走入世人眼线,并与集群创建工具(Machine)合力,意图构建容器生态的三驾马车。
进军生产环境之路,绝非一朝一夕,Docker同样招来了一些质疑。最令人深刻的,当属CoreOS与Docker的竞争。标准,无疑是如今行业的兵家必争之地。当时,容器标准和镜像标准迅速成为焦点。好在,最终在DockerCon 2015上,Solomon和CoreOS的创始人Alex Polvi最终握手言和,而Docker也将自己的容器技术实现libcontainer共享给Linux基金会,成立runC项目,与基金会一起建立并维护容器标准,此事对于整个容器生态而言,绝属一个利好消息。
三架马车的初具形态,容器标准的建立,依然无法掩盖外界对Docker在某些方面的诟病,诟病最多的当属Docker网络能力以及集群能力的薄弱。如果不能满足分布式应用的需求,Docker的未来难免存在阴影。2015年年末1.9.0版本的发布,则标志着Docker补上了自身的最后一块短板。无需借助第三方工具,Docker即原生支持跨主机容器的直接通信。其中,主要借助Docker Engine原生支持overlay网络来完成。
除了网络能力的重大突破,Docker的存储能力逐渐变得开放。Docker镜像方面,开始采用内容寻址方式,提高镜像利用率与安全性;容器存储方面,开放volume接口,方便用户集成第三方的存储解决方案,如Flocker、ScaleIO等。
集群能力的完善,给用户带来的体验绝对空前。自此,Docker的一体化世界已成形态,在容器领域形成一个巨大的工具链生态。
技术的迭代同时,Docker在资本市场的斩获也是捷报频传。融资的逐渐做大,也恰恰适应Docker的发展势头。Docker公司从2013年开始,一共经历了多轮融资,而且累计金额高达1.5亿。融资金额的巨大,意味着Docker将来一定要上市IPO,从而给投资方以回报。Docker的诞生至今,已经积累了大量的开发者,开发者市场可谓规模惊人,但是投资者和Docker都清楚,依靠开发者市场很难盈利,而上市IPO则必须有业绩,企业市场似乎就成了一条必经之路。纵观Docker的发展,不论是收购的步伐,还是产品的演进,商业化的意味也是逐步弥漫开来。
Docker公司及其前身在融资方面的进展详见下表:
融资金额 | 宣布日期 | 估值 | 领投者 | 投资者数量 |
D轮 | 1800万美金 | 2015年11月 | - | - |
D轮 | 9500万美金 | 2015年4月 | - | Insight Venture Partners |
C轮 | 4000万美金 | 2014年9月 | 4亿美金 | 红杉资本 |
B轮 | 1500万美金 | 2014年1月 | - | Greylock Partners |
A轮 | 1200万美金 | 2011年3月 | - | - |
资本的推动背后,Docker在收购方面,一直步步为营,循序渐进。从工具的吸纳,到平台的支持,到生态的构建,
Docker公司的收购案例详见下表:
日期 | 收购公司 | 收购金额 | 定位 |
2016年3月 | Conductant | 未知 | 应用集群调度 |
2016年1月 | Unikernel Systems | 未知 | 进入OS市场 |
2015年10月 | Tutum | 未知 | 补充容器运行时 |
2015年3月 | Kitematic | 未知 | 快速自动化配置部署 |
2015年3月 | SocketPlane | 未知 | 提高容器网络能力 |
2014年10月 | Koality | 未知 | 加速DockerHub企业版 |
2014年7月 | Orchard | 未知 | 提供服务编排 |
资本可以支撑Docker的运作,收购则是Docker技术与产品的补充。围绕“Build,Ship,Run”这一宗旨,Docker提供了一系列极大方便DevOps团队管理应用的集成产品。进一步深入,你会发现Docker已经提供了4类不同的产品:
不论是公有市场,还是企业化的私有市场,Docker的解决方案完全覆盖了两个领域。公有的Docker Hub以及基于Tutum的Docker公有云,极大的满足了公有云容器市场。而商业版的Docker Engine,Docker Trusted Registry以及UCP,则作为企业市场的三件套,形成完善的DDC(Docker Data Center),构建一体化的Docker数据中心。
针对开发者市场,Docker ToolBox则是一个专为开发者设计的工具包,从而实现云原生分布式应用的构建与运行。强大的工具包中几乎涵盖了Docker全部的开源项目,如:Docker Machine、Docker Swarm、Docker Compose、Docker Registry、Docker Engine以及Kitematic。
更为底层的基础设施工具,Docker提供了RunC来支持通用容器运行时;Notary可以帮助用户完成受信内容的传输分发;Unikernel则可以精简用户操作系统的,从而使应用的运行更高效更安全;
开放工业标准方面,Docker领导成立开放容器项目(The Open Container Project),并将其贡献给Linux基金会,与Linux共同构建容器格式与运行时的开放工业标准。截至到今天,全球已经有诸如Amazon、Google、Microsoft、redhat等50家公司宣布支持该项目。而RunC项目则是专为OCP而生的容器项目,从此容器标准完全可以基于RunC来发展。
纵观历史,没有哪项技术发展之快犹如Docker。伴随技术的发展,Docker生态的成长之势也是如此。
容器引擎一向是容器技术的核心部分。随着OCP的成立,runC已经成为容器生态中的工业标准,而Docker也借助自己在用户群体方面的压倒性优势,成为容器引擎领域的事实标准。生态内相同的容器引擎,当然还包括CoreOS团队开源的rkt项目,然而在用户以及社区活跃度方面,都和Docker存在较大的差距。
坐拥庞大的用户群,又有容器领域事实标准的优势,看似一家独大的局面形势大好。然而生态之争早已和一年前的形势大有差别。虽说容器标准之争暂告一段落,但接踵而至的则是更为激烈的容器编排(Container Orchestration)之争。
容器编排是目前容器生态中最为聚焦的话题,几个容器的管理并非难事,而调度、管理和监控大规模可扩展的容器集群则是一个巨大的挑战。其中涉及的技术难点更多、更棘手,比如:多种类型的任务的处理,容器的最佳运行节点的规划,故障恢复,存储共享,负载均衡等。容器编排的生态之争,远比想象中的激烈。除了立足容器标准的Docker之外,老将、新兵均有参与。
Mesos,作为分布式系统资源调度的先驱,很大程度上解决了大规模集群的资源问题,其提出的DCOS理念也逐渐被世人知晓。配合Mesosphere的Marathon的应用框架,可以说Mesos借助Docker的大潮,似乎看到了二次春天。然而如何和Docker更紧密的结合,发挥Docker原生的能力,则是Mesos亟需解决的问题。
Kubernetes(k8s),其内部原型是Google内部拥有10年左右成功运营经验的Borg平台,目前支持Docker,对外开源。对于k8s的诞生,似乎从来没有人质疑过Google的超大规模容器集群管理能力。换言之,生态之争,k8s始终站在令人高山仰止的位置,然而这也未必不是一件好事。从用户群体以及容器技术的角度而言,亲Docker或是避Docker,Kubernetes并没有太多的选择,而通过容器编排这一绝对制高点出手,通过3至5年的时间发展,或许有能力达到不错的收效。市场往往也不是技术一点来左右的,若不能撼动Docker的用户基础以及无法应对Docker容器技术拒绝开放的可能性,都将有可能让Kubernetes面临被动。Kubernetes必须让用户接受两套标准:即Docker标准以及k8s自身标准,不得不说这是一种无奈之举。对于Docker Engine的高速发展,k8s无法完全兼容,更是在Docker容器的滞后支持上表现出了一定程度的疲态。总结而言,隔着Docker,接触用户,试图落地,会有不少挑战。
Docker至今仍然视“Build,Ship,Run”为宗旨,编排(Orchestration)也许正在酝酿,至少布局之中,并未有太多的显露,当然本月初对于Conductant的收购,可能是较为明显的一步棋。如果说完备的工具链是进入企业市场的第一步,那么强大的容器集群编排将会满足企业内部进一步的需求。三年的时间,Docker把绝大部分的精力放在完善容器上,然而容器(Container)和应用(Application)之间总是隔着不可逾越的鸿沟。反观Docker,细细玩味,Docker定义的内容全部是容器的原语,只有在Docker Compose一层存在薄薄的应用原语。坐拥用户群与标准,高举“Docker Native”的大旗,在帮助用户转变应用模式方面,Docker责无旁贷。应用编排领域,Docker给外界的感受一直是不紧不慢,大有成竹在胸之态。生态之中,其他玩家最担忧的恐怕就是“Docker的釜底抽薪”了,也就是在开源的Docker Engine中添加更多的商业化考量,从而使得自身的竞争处于绝对的优势。担忧是一方面,Conductant的加入也让局势变得更加扑朔迷离,“应用”二字不再回避,瞬间应用编排生态在台面上呈“三足鼎立”之势。
Docker三周年,IT界巨变的三年,巨变的是应用模式,是容器生态,是编排技术,更是千万软件工程师对时代的思考。
厚积薄发,会是Docker未来几年内的最准备描述。而应用编排领域的竞争势必会更加白热化,鹿死谁手,三足鼎立抑或是百家争鸣,犹未可知。作为一个容器生态的参与者,很幸运能亲历时代的变迁。
还是那句话,发展是一个亘古不变的话题,而这十年,你会相信是Docker引领吗?
作者简介:孙宏亮,DaoCloud技术合伙人,主要负责DaoCloud企业级容器云平台的研发。对系统Docker化与微服务架构有丰富的经验,目前已出版《Docker 源码分析》一书,也是国内第一批研究及实践Docker的工程师,同时也是国内社区极具影响力的Docker布道者。