https://zhuanlan.zhihu.com/p/388840887

在本系列前几篇文章中,我们介绍了从Cloud Foundry到Docker等PaaS平台的发展迭代过程。今天我们继续来为大家介绍Docker走向落寞的原因以及大航海时代的开启。

Docker的商业化

上篇中,我们讲到了Docker项目利用自己创新的Docker Image瞬间爆红,于是许多商家也从中发现商机,纷纷推出自己的容器产品,也想在市场中分一杯羹。

CoreOS推出了Rocket(rkt)容器,Google也开源了自己的容器项目lmctfy(Let Me Container That For You)等,但是面对Docker项目的强势,就算是Google这种大佬也毫无招架之力。因此Google打算和Docker公司开展合作,关停自己的容器项目,并且和Docker公司一同维护开源的容器运行,但是Docker公司方面很强势的拒绝了这个明显会削弱自己地位的合作。

在这时Docker公司也意识到了,自己仅仅是云计算技术栈中的幕后英雄,只能当做平台最终部署应用的载体。但是,要想成为这个领域的核心,就应该有自己的PaaS生态。在Docker爆火,有了充足的资金之后,Docker公司开始了疯狂的买买买来扩充自己的实力,其中最出名的就署名Fig。Fig是出名的Docker Compose项目的前身。通过这些并购与自身研发迭代,Docker公司最终推出了以自己为核心的PaaS三件套:Docker Compose、Docker Swarm以及Docker Machine。

下面简单为大家介绍一下Docker三件套的内容:

1、Docker Compose:Compose的前身,是一个仅有两个人维护的Docker容器编排的开源项目Fig,它的功能是:假如现在用户需要部署一个应用A和一个数据库B以及负载均衡C,那么Fig就允许用户把ABC三个容器定义在一个配置文件中,并且指定它们的关联关系。最后只需要一条命令fig up即可直接使用。

在Docker大火的时候,Fig项目在Github上的热度堪比Docker,因此在2015年Docker公司将其收购,并且改名为Docker Compose,作为Docker容器的编排工具,并且使用至今。

2、Docker Swarm:Swarm是Docker的集群管理项目,其主要的逻辑就和上一节讲过的Cloud Foundry类似,可以以类似于docker run 我的镜像的命令行方式,以docker run -H 我的Swarm集群API地址 我的镜像这样将Docker运行成一个集群并且进行管理,Swarm的出现将Docker项目从一个普通的容器升级成为PaaS平台。

3、Docker Machine:Machine应该是Docker三件套里最不出名的,它的功能是将虚拟机运行成容器,并且可以以管理Docker容器的方式管理虚拟机。

Docker通过三件套迅速成为了当时行业内的霸主。此外,Docker公司还做出了一个更加惊人的动作:将公司名由dotCloud改名为Docker,并且将Docker注册成了自己的商标,开展自己的商业化路径。但是这样做同时也意味着,其他公司使用Docker就要给Docker公司支付大额的授权费用,这种商业化垄断的行为,严重侵犯了其他容器玩家的切身利益,这为Docker以后的没落埋下了伏笔。

OCI的“不作为”到CNCF出现

在发展之路上,Docker公司在Docker开源项目的发展上始终保持着绝对的权威和发言权,并且在多个场合用实际行动挑战到了其他玩家的利益;另一方面,Docker公司的商业化路径严重侵害了曾经的合作公司RedHat的切身利益;再加之,Docker在2015年间的高速迭代表中现出了各种不稳定的breaking change开始让社区叫苦不迭。

人红是非多,更何况Docker还抢了大家的蛋糕。于是,容器领域的其他几位玩家开始商讨“切割”Docker项目的话语权。最终,Docker公司迫于压力,于2015年6月22日,牵头了CoreOS、Google、RedHat等公司,共同成立了一个中立的基金会,并将自己的容器运行时LibContainer捐出,改名为RunC,基金会依据RunC共同制定了一套容器和镜像的标准和规范——OCI(Open Container Initiative)。

OCI的成立,意味着容器运行时和镜像的实现与Docker项目完全剥离,让其他玩家不依赖Docker实现自己的Docker运行时成为可能。

但是,由于成立基金会只是Docker公司对这些大公司的妥协,并且其当时确实维护着数量足够庞大的社区,因此Docker公司对基金会的成立有恃无恐,并且对标准的制定并不关心。因为在当时的大环境下,Docker自己的实现,已经就是业界统一的标准了。

由于OCI基金会发展十分缓慢,因此Google、RedHat等基础设施领域的头部玩家打出了手中的王牌,共同牵头成了一个名叫CNCF(Cloud Native Computing Foundation)的基金会(这也是云原生这个概念第一次出现在大众视野内)。CNCF基金会成立的思想基础是,以Kubernetes项目为基础,建立一个由开源基础设施领域厂商主导的按照独立基金会方式运营的平台级社区,来对抗以Docker为核心的容器商业生态。也正是这个基金会的成立,我们第二节的主人公Kubernetes也开始崭露头角。

Kubernetes的出现与发展

Kubernetes是Google公司早在2014年就发布开源的一个容器基础设施编排框架,和其他拍脑袋想出来的技术不同,Kubernetes的技术是有理论依据的,即:Borg。Borg是Google公司整个基础设施体系中的一部分,Borg是Google公司整个基础设施体系中的一部分,Google也发布了多篇关于Borg的论文作为其理论支持。其上承载了比如MapReduce、BigTable等诸多业界的头部技术。因此Borg系统一直以来都被誉为Google公司内部最强大的“秘密武器”,也是Google公司最不可能开源的项目,而Kubernetes就是在这样的理论基础上开发的。下图是Google Omega论文所描述的Google已公开的基础设施栈。

开源vs闭源

面对k8s的出现,一场Docker和k8s之间的容器之战就此打响。

在这场对抗之初,由于Kubernetes开发灵感和设计思想来源于Borg,Kubernetes项目在刚发布时就被称为曲高和寡。太过超前的思想让开发者无法理解,同时由于Kubernetes项目一直由Google的工程师自行维护,所以在发布之初并没有获得太多的关注和成长。

然而,CNCF的成立改变了这一切,RedHat的长处就是有着成熟的社区管理体系,并且也有足够多的工程能力,这使得Kubernetes项目在交由社区维护开始迅速发展,并且逐渐开始和Docker分庭抗礼。并且和Docker的封闭商业模式不同,Kubernetes反其道而行之主打开源和民主化,每一个重要功能都给用户提供了可定制化的接口,并且普通用户也可以无权限拉取修改Kubernetes的代码,社区有专门的reviewer以及approver,只要你写的代码通过PR通过了代码审核和批准,就会成为Kubernetes的主干代码,这也大大的增加了Kubernetes的活力。并且,依托于开放性接口,基于Kubernetes的开源项目和插件比比皆是,并且依托于优秀的架构设计,微服务等新兴的技术理念也迅速落地,最终形成了一个百花齐放的稳定庞大的生态。

而Docker只能通过自己的工程师修改,在这一点上与Kubernetes相比就与远落下风。

总结起来:

面对Kubernetes社区的崛起和壮大,Docker公司不得不承认自己的豪赌以失败告终,从2017年开始,Docker将Docker项目的容器运行时部分Containerd捐赠给了CNCF社区,并且在当年10月宣布将在自己的Docker企业版中内置Kubernetes项目,这也标志着持续了近两年的容器编排之战落下帷幕。2018年1月,RedHat公司宣布斥资2.5亿美元收购CoreOS,2018年3月,这一切纷争的始作俑者Docker公司的CTO Solomon Hykes宣布辞职,至此,纷扰的容器技术圈尘埃落定,天下归一。

总结

本文为大家介绍了Docker是如何在PaaS平台中成为焦点,又如何一步步被Kubernetes替代。下一节我们将继续为大家介绍Kubernetes除了社区之外,在本身的容器编排技术上是如何降维打击Docker公司的,敬请期待。

更多精彩内容,可以关注葡萄城技术博客:

[转帖]Docker与k8s的恩怨情仇(四):云原生时代的闭源落幕的更多相关文章

  1. Docker与k8s的恩怨情仇(四)-云原生时代的闭源落幕

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在本系列前几篇文章中,我们介绍了从Cloud Foundry到Docker等PaaS平台的发展迭代过程.今天 ...

  2. Docker与k8s的恩怨情仇(七)—— “服务发现”大法让你的内外交互原地起飞

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 第一章:Docker与k8s的恩怨情仇(一)-成为PaaS前浪的Cloud Foundry 第二章:Dock ...

  3. Docker与k8s的恩怨情仇(一)—成为PaaS前浪的Cloud Foundry

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 大家在工作中或许或多或少都接触过Docker,那你知道Docker以及容器化背后的原理到底是什么吗? 容器化 ...

  4. Docker与k8s的恩怨情仇(六)—— “容器编排”上演“终结者”大片

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在上节中,我们为大家介绍了Pod的基础内容,Kubernetes如何站在上帝视角上处理容器和容器之间的关系. ...

  5. Docker与k8s的恩怨情仇(八)——蓦然回首总览Kubernetes

    在系统介绍了如何实际部署一个K8S项目后,作为本系列文章的最后一篇,我们一起来看看Kubernetes集群内容总览,再对一些更深层次的功能进行总结. Kubernetes总览 下图是一个k8s的总览结 ...

  6. Docker与k8s的恩怨情仇(二)—用最简单的技术实现“容器”

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上次我们说到PaaS的发展历史,从Cloud Foundry黯然退场,到Docker加冕,正是Docker& ...

  7. Docker与k8s的恩怨情仇(三)—后浪Docker来势汹汹

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上一节我们为大家介绍了Cloud Foundry等最初的PaaS平台如何解决容器问题,本文将为大家展示Doc ...

  8. Docker与k8s的恩怨情仇(五)——Kubernetes的创新

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上节中我们提到了社区生态的发展使得Kubernetes得到了良性的发展和传播.比起相对封闭的Docker社区 ...

  9. [转帖]从 SOA 到微服务,企业分布式应用架构在云原生时代如何重塑?

    从 SOA 到微服务,企业分布式应用架构在云原生时代如何重塑? 2019-10-08 10:26:28 阿里云云栖社区 阅读数 54   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权 ...

  10. 50篇经典珍藏 | Docker、Mesos、微服务、云原生技术干货

    概念篇 全方位探(tian)索(keng)Mesos各种存储处理方式 老肖有话说@Mesos User Group第四次约会 技术实践 | Mesos 全方位“烹饪”指南 回顾 JAVA 发展轨迹,看 ...

随机推荐

  1. Ubuntu系统部署后优化

    Ubuntu系统配置调整 前期准备 #更改主机名,重启后不变 hostnamectl set-hostname Zabbix-Server01 #更改主机名,重启后变回从前 hostname Zabb ...

  2. java生成企业公章图片源代码

    企业公章图片在电子签章业务中应用广泛,在电子签章应用过程中首先需要生成公章图片,然后再使用公章图片结合数字签名技术完成电子签,这样就实现了从可视化到不可篡改的数字化电子签章功能,以下是企业公章图片生成 ...

  3. 为什么maven配置完Tomcat且运行之后页面内容没有显示出来?

    1.如何在maven项目中配置一个webapp项目? 首先新建一个maven项目 项目目录 <?xml version="1.0" encoding="UTF-8& ...

  4. 2023-07-07:给出两个字符串 str1 和 str2。 返回同时以 str1 和 str2 作为子序列的最短字符串。 如果答案不止一个,则可以返回满足条件的任意一个答案。 输入:str1 =

    2023-07-07:给出两个字符串 str1 和 str2. 返回同时以 str1 和 str2 作为子序列的最短字符串. 如果答案不止一个,则可以返回满足条件的任意一个答案. 输入:str1 = ...

  5. maven系列:依赖管理和依赖范围

    目录 一.依赖管理 使用坐标导入jar包 使用坐标导入 jar 包 – 快捷方式 使用坐标导入 jar 包 – 自动导入 二.依赖范围 三.可选依赖 四.排除依赖 一.依赖管理 使用坐标导入jar包 ...

  6. JavaScript继承的实现方式:原型语言对象继承对象原理剖析

    面向对象编程:继承.封装.多态. 对象的继承:A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法.这对于代码的复用是非常有用的. 在经典的面向对象语言中,您可能倾向于定义类对象,然后您 ...

  7. 火山引擎 DataLeap 下 Notebook 系列文章二:技术路线解析

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在 Jupyter 的生态下,除了 Notebook 本身,火山引擎 DataLeap 研发团队还注意到了很多其他 ...

  8. Nginx log 日志文件较大,按日期生成 实现日志的切割

    Nginx日志不处理的话,会一直追加,文件会变得很大,所以理想做法是按天对 Nginx日志进行分割 方法1:给日志文件名加上日期 推荐 log_format access-upstream '$tim ...

  9. PPT 商务PPT 如何展示你的产品

    PPT 商务PPT 如何展示你的产品 如何优雅的展示产品 如何展示互联网产品 直接产品截图,比较生硬,简单粗暴 使用场景+样机 放一个电脑或手机的外壳 如何展示产品 如何展示现实中的产品 多角度剪裁 ...

  10. 【已解决】:Original error: Could not extract PIDs from ps output. PIDS: [], Procs: [“ps: uiautomator”]

    报错截图 因为appium服务用的是1.4.x版本,使用的是 uiatumator1.0在android7.0得不到支持,所以获取PIDS得到空. 解决办法 找到Appium安装目录下node_mod ...