信息化,一个不可逆转的潮流,潮流之下,发展是一个亘古不变的话题。
IT 界同样如此,半年一浪,三载一潮,技术的迭代之快令人咂舌。5 年前的 Hadoop,3 年前的 OpenStack,到如今之 Docker,无一不是一浪高过一浪。说到发展,谈及热度,目前容器领域的新技术 Docker,绝对是受到 IT 界前所未有的关注,因此也时常有人调侃:出门不知 Docker,实乃 IT 从业人员难以启齿的隐痛。
作为三年前刚刚诞生的新生儿,Docker 已然给云计算、应用交付等多个领域带来巨大的革新。细谈 Docker,我们却发现,Docker 背后的容器技术,其实并非首创,早在十数年前,容器技术便已有雏形,那究竟为何 Docker 的席卷之势空前之大。不论是技术领域有什么独到之处,还是时势造就了如今大好的局面,我们都没有理由不来细细品鉴 Docker 这三年来的种种发展。
什么是 Docker?
狭义而言,Docker 是一款轻量级容器的管理引擎软件。云计算时代,可以帮助用户轻松实现分布式应用的“Build, Ship, Run”。
广义而言,Docker 是一家以容器服务为基础的硅谷公司,试图改变传统应用的构建与交付方式,创造应用模式的新时代。目前,从市场发展与技术影响而言,Docker 凸显了极大的潜力。
回顾 Docker 的三周年,从技术的发展到公司的运营,从产品的布局到生态的建设,我们不由得感慨,下一个巨人是否就是这家 logo 是鲸鱼的公司。
Docker 诞生
三年前的云计算,提到最多的关键字无疑是 IaaS(Infrastructure-as-a-Service,基础设施即服务)。企业往往通过 IaaS 技术建立起信息化的数据中心,有效地管理池化资源。如果历史的发展仅仅满足于此,那么科技也就会停滞不前。
当时,在加州湾区以 Solomon Hykes 为首的几位天才工程师就在尝试,能否在资源之上,架构出一套完善的分布式平台,有效快速帮助用户的应用系统平稳运行。他们的公司实体也就是 Docker 的前身 dotCloud。经历了一段时间的试水之后,历史并未遂这群极客的愿,dotCloud 云战略的运营并非成功。
然而,常言道,失败是成功之母,这句话印证在 dotCloud 身上再适合不过。失利的同时,Solomon 敏锐地嗅探到了,dotCloud 体系的中的容器技术,反倒是解决了目前市场上用户应用构建、分发和发布的诸多痛点。痛定思痛,Solomom 迅速技术转型,开始投向容器技术,并从一开始就开源,当时就吸引了为数不少的开发者。
时间定格在 2013 年 3 月,容器技术定名为 Docker,原力诞生。
技术演进
诞生仅仅意味着不平凡的开始。后来的 3 年时间中,Docker 立足技术,服务用户,培育市场,建立生态,发展历程可圈可点。
开源、轻量级、API 标准
开源、轻量级、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 在收购方面,一直步步为营,循序渐进。从工具的吸纳,到平台的支持,到生态的构建,
- 2014 年 7 月,Docker 收购 Orchard 掀起了收购的序幕,随后立即将 Orchard 的产品 Fig 更名为 compose,成为 Docker 最重要的项目之一进行维护,辅助完善 Docker 容器的编排业务。
- 同年 10 月,Docker 收购 Koality,加速企业版 DockerHub 的开发,从而在企业级工作流程以及应用生命周期管理方面提供更自动化,更高效的服务。
- 2015 年的 3 年,Docker 和 SocketPlane 走到了一起,容器的网络能力得到一定程度的突破,SocketPlane 在 SDN 方面的经验,也帮助 Docker 成功孕育了后期 libnetwork 项目的发展。
- 同年同月,Kitematic 拥抱 Docker,容器的自动化配置部署也帮助 Docker 在用户市场占领更大的份额。
- 去年 10 月,震惊容器界的大新闻无疑是 Docker 对于 Tutum 的收购。这一举动将 Docker 的意图表现得再明显不过,容器化企业级应用的部署与管理版图初步完善。
- 今年年初,Unikernel 与 Docker 的结合,则和以往的并购案稍显不同。也许 Docker 早已察觉到在未来的容器世界中,操作系统是一个有待革命的领域。如何实现操作系统的精简,进而更好的支持容器的运行,很有可能是操作系统的变革之路,比如 CoreOS 的起点,也是基于这样的理念。
- 3 月初,另一个大新闻则是 Docker 对于 Conductant 的收购。要知道 Conductant 的团队是 Aurora 项目的创始者,而 Aurora 则是 Mesos 之上最为成功的框架之一,用于支持长任务的运行以及周期性的任务。此举的意图无需多谈,对于应用的编排管理,Docker 已经不甘示弱,奋起直追,力求与 Kubernetes 和 Marathon 正面竞争。
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 工具箱
- 软件基础插件
- 开放工业标准
不论是公有市场,还是企业化的私有市场,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 布道者。
评论