在云计算的当天,像 docker、Kubernetes、open shift等容器技术广为人知。云技术正在迅速取代传统的IT架构,尤其基于容器、微服务为核心的PaaS平台的成熟和普及,为IT系统的构建和运维,提供了全新的模式和效能。

那么把时间拉回到2013年,发展历程又是怎样的哪?在介绍之前优先阐述下云计算、Iaas、Paas、Saas、Daas的基本概念。
基础概念
云计算
一个软件在执行以完成某项任务的时候,如果用到的计算设备和输入/输出设备不是通过主板连接,而是通过网络连接,那么这个过程就叫云计算。
Iaas
IaaS是Infrastructure as a server的缩写,意思是基础设施即服务。云端公司把IT环境的基础设施建设好,然后直接对外出租硬件服务器或者虚拟机。消费者可以利用所有计算基础设施,包括处理CPU、内存、存储、网络和其它基本的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。消费者不管理或控制任何云计算基础设施,但能控制操作系统的选择、存储空间、部署的应用,也有可能获得有限制的网络组件(例如路由器、防火墙、负载均衡器等)的控制。如下图所示:

Paas
PaaS是Platform as a Server的缩写,意思是平台即服务,即把运行用户所需的软件的平台作为服务出租。如下图所示:

Saas
SaaS是Software as a Server的缩写,意思是软件即服务。把软件租出去,用户连安装都不需要了。同样来看图:

Daas
DaaS是Data as a Server的缩写,意思是数据即服务。云端公司负责建立全部的IT环境,收集用户需要的基础数据并且做数据分析,最后对分析结构或者算法提供编程接口,让数据成为服务。如图:

当然还有功能即服务 (FaaS)、容器即服务(Caas),这里就不再进行阐述,更多信息可以参照:https://developer.ibm.com/zh/articles/when-to-use-iaas-faas-paas-and-caas/
发展历程
初出茅庐
早在2013年,而相比于如日中天的 AWS 和盛极一时的 OpenStack,以 Cloud Foundry 为代表的开源 PaaS 项目,却成为了当时云计算技术中的一股清流。当时还名叫 dotCloud 的 Docker 公司,也是这股 PaaS 热潮中的一份子。只不过相比于 Heroku、Pivotal、Red Hat 等 PaaS 弄潮儿们,dotCloud 公司实在是太微不足道了,而它的主打产品由于跟主流的 Cloud Foundry 社区脱节,长期以来也无人问津。眼看就要被如火如荼的 PaaS 风潮抛弃,dotCloud 公司却做出了这样一个决定:开源自己的容器项目 Docker。当然这是Docker时代的开端,那么Docker的核心竞争力有哪些,使它异军突起?这个功能,就是 Docker 镜像。
PaaS 项目被大家接纳的一个主要原因,就是它提供了一种名叫“应用托管”的能力。在当时,虚拟机和云计算已经是比较普遍的技术和服务了,那时主流用户的普遍用法,就是租一批 AWS 或者 OpenStack 的虚拟机,然后像以前管理物理服务器那样,用脚本或者手工的方式在这些机器上部署应用。当然,这个部署过程难免会碰到云端虚拟机和本地环境不一致的问题,那么使用起来就会及其的痛苦和费时。而 PaaS 开源项目的出现,就是当时解决这个问题的一个最佳方案。而以Cloud Foundry为首Paas平台,用户就必须为每种语言、每种框架,甚至每个版本的应用维护一个打好的包。这个打包过程,没有任何章法可循,更麻烦的是,明明在本地运行得好好的应用,却需要做很多修改和配置工作才能在 PaaS 里运行起来。而这些修改和配置,并没有什么经验可以借鉴,基本上得靠不断试错,直到你摸清楚了本地应用和远端 PaaS 匹配的“脾气”才能够搞定。
而 Docker 镜像解决的,恰恰就是打包这个根本性的问题。所谓 Docker 镜像,其实就是一个压缩包。但是这个压缩包里的内容,比 PaaS 的应用可执行文件 + 启停脚本的组合就要丰富多了。实际上,大多数 Docker 镜像是直接由一个完整操作系统的所有文件和目录构成的,所以这个压缩包里的内容跟你本地开发和测试环境用的操作系统是完全一样的。
Docker 项目给 PaaS 世界带来的“降维打击”,其实是提供了一种非常便利的打包机制。这种机制直接打包了应用运行所需要的整个操作系统,从而保证了本地环境和云端环境的高度一致,避免了用户通过“试错”来匹配两种不同运行环境之间差异的痛苦过程。
对于开发者们来说,在终于体验到了生产力解放所带来的痛快之后,他们自然选择了用脚投票,直接宣告了 PaaS 时代的结束。
全盛时期
在Docker开源一年多后,“容器化”取代“PaaS 化”成为了基础设施领域最炙手可热的关键词,一个以“容器”为中心的、全新的云计算市场,正呼之欲出。而作为这个生态的一手缔造者,此时的 dotCloud 公司突然宣布将公司名称改为“Docker”。
此时 “PaaS”的定义已经全然不是 Cloud Foundry 描述的那个样子,而是变成了一套以 Docker 容器为技术核心,以 Docker 镜像为打包标准的、全新的“容器化”思路。如何让开发者把应用部署在我的项目上。不失时机地发布了 Docker Compose、Swarm 和 Machine“三件套”,在重新定义 PaaS 的方向上走出了最关键的一步。
这段时间,也正是 Docker 生态创业公司们的春天,大量围绕着 Docker 项目的网络、存储、监控、CI/CD,甚至 UI 项目纷纷出台,也涌现出了很多 Rancher、Tutum 这样在开源与商业上均取得了巨大成功的创业公司。
尘埃落定
Docker 公司在 Docker 开源项目的发展上,始终保持着绝对的权威和发言权,并在多个场合用实际行动挑战到了其他玩家(比如,CoreOS、RedHat,甚至谷歌和微软)的切身利益。Docker 公司在容器运行时层面上的强硬态度,以及 Docker 项目在高速迭代中表现出来的不稳定和频繁变更的问题,开始让社区叫苦不迭。2015 年 6 月 22 日,由 Docker 公司牵头,CoreOS、Google、RedHat 等公司共同宣布,Docker 公司将 Libcontainer 捐出,并改名为 RunC 项目,交由一个完全中立的基金会管理,然后以 RunC 为依据,大家共同制定一套容器和镜像的标准和规范。
OCI 的成立更多的是这些容器玩家出于自身利益进行干涉的一个妥协结果。所以,尽管 Docker 是 OCI 的发起者和创始成员,它却很少在 OCI 的技术推进和标准制定等事务上扮演关键角色,也没有动力去积极地推进这些所谓的标准。
Google、RedHat 等开源基础设施领域玩家们,共同牵头发起了一个名为 CNCF(Cloud Native Computing Foundation)的基金会。这个基金会的目的其实很容易理解:它希望,以 Kubernetes 项目为基础,建立一个由开源基础设施领域厂商主导的、按照独立基金会方式运营的平台级社区,来对抗以 Docker 公司为核心的容器商业生态。
此时的容器生态圈中,Kubernetes 项目、Docker 公司和 Mesos 社区大有三国鼎立之势。Kubernetes 项目让人耳目一新的设计理念和号召力,很快就构建出了一个与众不同的容器编排与管理的生态。Kubernetes 社区在 2016 年之后得到了空前的发展。更重要的是,不同于之前局限于“打包、发布”这样的 PaaS 化路线,这一次容器社区的繁荣,是一次完全以 Kubernetes 项目为核心的“百家争鸣”。
在早前拒绝了微软的天价收购之后,Docker 公司实际上已经没有什么回旋余地,只能选择逐步放弃开源社区而专注于自己的商业化转型。
从 2017 年开始,Docker 公司先是将 Docker 项目的容器运行时部分 Containerd 捐赠给 CNCF 社区,标志着 Docker 项目已经全面升级成为一个 PaaS 平台;紧接着,Docker 公司宣布将 Docker 项目改名为 Moby,然后交给社区自行维护,而 Docker 公司的商业产品将占有 Docker 这个注册商标。
2017 年 10 月,Docker 公司出人意料地宣布,将在自己的主打产品 Docker 企业版中内置 Kubernetes 项目,这标志着持续了近两年之久的“编排之争”至此落下帷幕。
2018 年 1 月 30 日,RedHat 宣布斥资 2.5 亿美元收购 CoreOS。
2018 年 3 月 28 日,这一切纷争的始作俑者,Docker 公司的 CTO Solomon Hykes 宣布辞职,曾经纷纷扰扰的容器技术圈子,到此尘埃落定。




