极简Docker和Kubernetes发展史
2013年
Docker项目开源
2013年,以AWS及OpenStack,以Cloud Foundry为代表的开源Pass项目,成了云计算领域的一股清流,pass提供了一种“应用托管”的能力。
当时的虚假机和云计算已经是比较普遍的技术了,主流用法就是租一批AWS或者OpenStack的虚拟机,然后用脚本或者手工的方式在机器上部署应用
Cloud Foudry这样的Pass项目,核心组件就是一套打包和分发机制,会调用操作系统的Cgroups和Namespace机制 为每个应用单独创建“沙盒”的隔离环境,然后在“沙盒”中运行这些进程,实现了多用户、批量、隔离运行的目的。
这个“沙盒”,就是所谓的容器。
这一年还叫dotCloud的Docker公司,也是Pass热潮中的一员。只不过,比起Heroku、Pivotal、Red Hat等大佬,dotCloud公司显得太微不足道,主打产品跟主流的CloudFoundry社区脱节,眼看就要阵亡的时候,dotCloud公司决定开源自己的容器项目Docker
“容器”其实不是什么新鲜的东西,不是Docker发明的,当时最热的Pass项目Cloud Foundry中,容器也只是最底层、最不受关注的一部分。
短短几个月,Docker就迅速崛起了,然后Cloud Foundry等所有Pass社区还没来得及成为对手,就已经被淘汰了。
Docker项目大部分和Cloud Foundry容器大部分功能和实现原理是一样的,但是不一样的“Docker镜像”,解决了环境打包的问题,直接打包了应用运行所需要的整个操作系统,赋予了本地环境和云端环境调度一致的能力,避免了用户通过“试错”来匹配不同环境之间差异的痛苦过程, 这也是Docker的精髓。
Pass的定义变成了一套以Docker容器为技术核心,以Docker镜像为打包标准的“容器化”思路
2013年年底,dotClound公司正式改名为Docker公司
2014年
Docker发布Docker Swarm
Docker发布Docker Swarn,以一个完整的整体来对外提供集群管理功能,最大的亮点就是完全使用Docker项目原来的容器管理API来完成集群管理。
docker run "容器"
只需要变成
docker run -H "swarm集群API地址" "容器"
用户只需要使用原先的docker指令创建一个容器,这个请求就会被swarm拦截处理,通过具体的调度算法找到一个适合的Docker Daemon。
这种方式对已经熟悉docker命令行的开发者们非常的友好。
Docker收购Fig,并改名Compose
Docker公司收购了Fig项目,后改名为(Compose)。
Fig项目在开发者面前第一次提出了“容器编排”(Container Orchestration)
在云计算领域,“编排”主要指用户如何通过某些工具或者配置来完成一组虚拟机以及关联资源的定义、配置、创建、删除等工作,然后由云计算平台按照这些指定的逻辑来完成的过程
而容器时代,“编排”就是对Docker容器的一系列定义、配置和创建动作的管理。
Docker和Mesosphere公司的竞争
除了Docker生态外,Mesos和背后的创建公司Mesosphere也是一个非常大的热力,Mesos是大数据最受欢迎的资源管理项目,跟Yarn项目竞争的实力派对手。
大数据关注的计算密集型离线业务,其实不像Web服务那样适合用容器进行托管和扩容,也没有应用打包的强烈需要,所以Hadoop、Spark等项目现在也没在容器技术投入很大的精力,但是Mesos作为大数据套件之一,天生的两层调度机制让它非常容易从大数据领域独立出来去支持更广泛的Pass业务,所以Mesos公司发布了Marathon项目,成为了Docker Swarm的一个强有力的竞争对手。
虽然不能提供像Swarm那样的Docker API,但是Mesos社区拥有一个非常大的竞争力:超大规模集群管理经验
Mesos+Marathon组合进化成了一个调度成熟的Pass项目,同时能支持大数据业务,
Docker和CoreOS
CoreOS是一个基础设施领域创业公司,核心产品是一个定制化的操作系统,用户可以按照分布式集群的方式,管理所有安装了这个系统的节点,使用用户在集群里部署应用像使用单机一样方便
Docker项目发布后,Corecd很快认识到可以把容器的概念无逢集成到自己的这套方案中,从而为用户提供更高层次的Pass能力,所以CoreOS很早就成了Docker项目的贡献者,然而在2014年结束了合作,推出了自己的容器Rocket(rkt),然而这个rkt容器完全被Docker公司压制了。
OCI标准制定
由CoreOS、Google、RatHat等公司共同宣布,Docker公司将Libcontainer(容器运行时库)捐出,并改名为RunC项目,交由一个完全中立的基金会管理,以RunC为依据共同制定一套容器和镜像的标准规范
,叫OCI(Open Container Initiative),意在将容器运行时和镜像的实现从Docker项目中完全剥离出来,以此来压制Docker公司一家独大的现状,同时也为不依赖Docker项目构建平台层能力提供了可能。
不过并没有改变Docker在容器领域一家独大的现状
Kubernetes诞生
2014年6月,基础设施领域的领先者Google发,正式宣告了Kubernetes项目的诞生(Borg的开源版本),如同Docker横空出世一样,再一次改变了容器市场的格局。
微软、RedHat、IBM、Docker加入Kubernetes社区
2015年
CNCF基金会成立
为了在容器编排地位取得绝对的优势,同Swarm和Mesos竞争,Google、RedHat等开源基础设施公司,共同发起了一个名为CNCF的基金会:希望以Kubernetes为基础,建立一个由开源基础设施领域厂商主导、按照独立基础会方式运营的平台社区,来对抗以Docker公司为核心的容器商业生态。简单的说就是打造一个围绕Kubernetes项目的“护城河”。
Docker擅长Docker生态的无缝集成,Mesos擅长大规模集群的调度与管理,Kubernetest选择了Pod、Sidecar等功能和模式作为切入点(大多来自Borg和Omega系统的内部特性)。
Kubernetes的团队规模很少,投入的工程能力有限,RedHat在这时候和Google联盟,正式开户了容器编排“三国鼎立”的书面。
Kubernetes来自Google公司在容器化基础设施领域多年来实践经验的沉淀和升华,在Github上的各项指标一路飙升,将Swarm项目远远地甩在了后边。
同年,Kubernetes发布Helm软件包管理系统、kubeam安装工具、发布Mikibube等一列更新操作
CNCF社区迅速增加了Prometheus、Fluentd、OpenTracing、CNI等一系列容器生态的知名工具和项目
大量的公司和创建团队将注意力投向CNCF社区而不再是Docker公司
2016年
Docker公司放弃现有的Swarm项目,将容器编排和集群管理功能内置到Docker中
面对CNCF的竞争优势,Docker公司宣布放弃现有的Swarm项目,将容器编排和集群管理功能内转到Docker项目当中。
然而这种改变带来的技术复杂度和维护难度,给Docker项目造成了非常不利的书面
Kuberntes支持OpenApi,给开发人员定制化提供更大的灵活性
不同于Docker公司,Kubernetes推进“民主化”架构:从API到容器运行的每一层,都给开发者暴露出了可扩展的插件机制,鼓励用户通过代码的方式介入每一个阶段。
Kubernetes项目的这个变革非常有效,很快在整个容器社区中催生出了大量的、基于Kubernetes API和扩展接口的二次创新产品:
- 热度极高的Istio微服务治理工具
- 应用部署框架Operator
- Rook开源创业项目,把Ceph重量级产品封装成了简单易用的容器存储插件
Docker公司在Kubernetes社区的崛起和壮大后,败下阵来。
2017年
Docker将Containerd捐献给CNCF社区
Docker公司将容器运行时部分Containerd捐献给CNCF社区,标志着Docker项目你下面升级成为了一个Pass平台,Docker公司宣布将Docker项目改名为Moby,交给社区自行维护,而Docker公司的商业产品还占有Docker这个注册商标。
同年10月,Docker宣布将在自己主打产品Docker企业版中内置Kubernetes项目,持续了两年的容器编排之争终于落下帷幕
2018年
RatHat宣布2.5亿美元收购CoreOS
Docker公司CTO Solomon Hykes宣布辞职,容器技术圈子从此尘埃落定
极简Docker和Kubernetes发展史的更多相关文章
- 【转帖】极简Docker和Kubernetes发展史
极简Docker和Kubernetes发展史 https://www.cnblogs.com/chenqionghe/p/11454248.html 2013年 Docker项目开源 2013年,以A ...
- .Net Core in Docker极简入门(下篇)
Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 Docker-Compose 代码修改 yml file up & down 镜像仓库 最后 前言 上一篇[. ...
- 树莓派(Raspberry Pi)使用Shell编写的极简Service
树莓派(Raspberry Pi)运行的系统是基于Debian的,不仅可以运行Shell,还支持systemd和docker,可以编写一个简单的服务,让其在启动时运行,执行一些自动化的操作.这里在Ra ...
- Asky极简教程:零基础1小时学编程,已更新前8节
Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...
- CSharpGL(28)得到高精度可定制字形贴图的极简方法
CSharpGL(28)得到高精度可定制字形贴图的极简方法 回顾 以前我用SharpFont实现了解析TTF文件从而获取字形贴图的功能,并最终实现了用OpenGL渲染文字. 使用SharpFont,美 ...
- Vim,极简使用教程,让你瞬间脱离键鼠切换的痛苦
注:看大家对Vim仇恨极大,其实它只是一种文本操作方式,可以减少键鼠的切换,从而让编辑文本的操作更迅捷.并不等同于IDE,在我看来,它们是两个是包含关系,IDE可以有Vim编辑模式.Vim或许可以通过 ...
- CentOS下使用Postfix + Dovecot + Dnsmasq搭建极简局域网邮件系统
背景 开发环境为局域网,工作内容需要经常查看邮件文件(*.eml),可恶的Foxmail必须验证账户才能进入主界面,才能打开eml文件查看. 无奈搭一个局域网内的邮件系统吧.极简搭建,仅用于通过Fox ...
- 在Web应用中接入微信支付的流程之极简清晰版
在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...
- Snabbt.js – 极简的 JavaScript 动画库
Snabbt.js 是一个简约的 JavaScript 动画库.它会平移,旋转,缩放,倾斜和调整你的元素.通过矩阵乘法运算,变换等可以任何你想要的方式进行组合.最终的结果通过 CSS3 变换矩阵设置. ...
随机推荐
- sqlserver清除日志
在一次处理数据库日志已满的过程中,发现有的时候数据库日志不能清除,经实验,可以通过以下方式来完成. 使用exec sp_cycle_errorlog 来清除sql系统本身的临时日志. dump tra ...
- 腾讯云centos7 从零搭建laravel项目
目标,访问网站出现: -----------------------分割线---------------------------------------- 一.Laravel Homestead 环境 ...
- 初始SpringMVC 完整版
初始SpringMVC 1.SpringMVC 也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的. 2.Java EE ...
- 使用log4j进行日志管理
17.1.Log4j简介 作用: 1. 跟踪代码的运行轨迹. 2. 输出调试信息. 三大组成: 1. Logger类-生成日志. 2. Appender类-定义日志输出的目的地. 3. Layou ...
- 第三章 基础算法和数据结构高频题 I
区间类问题 1 Missing Interval public List<String> findMissingRanges(int[] nums, int lower, int uppe ...
- WPF 动态添加按钮以及样式字典的引用(Style introduction)
我们想要达到的结果是,绑定多个Checkbox然后我们还可以获取它是否被选中,其实很简单,我们只要找到那几个关键的对象就可以了. 下面是Ui,其中定义了一个WrapPanel来存放CheckBox,还 ...
- 游戏开发3D基础知识
概念学习: 向量 向量简介 我们将所有彼此平行的向量进行平移,使其起点与坐标原点重合,当某一向量的起始端与坐标原点重合,我们成该向量处于标准位置.这样,我们就可用向量的终点坐标来描述一个处于标准位置的 ...
- Restful API 中的错误处理
简介 随着移动开发和前端开发的崛起,越来越多的 Web 后端应用都倾向于实现 Restful API. Restful API 是一个简单易用的前后端分离方案,它只需要对客户端请求进行处理,然后返回结 ...
- poj 1050 To the Max(最大子矩阵之和)
http://poj.org/problem?id=1050 我们已经知道求最大子段和的dp算法 参考here 也可参考编程之美有关最大子矩阵和部分. 然后将这个扩大到二维就是这道题.顺便说一下,有 ...
- Linux部署项目遇到问题解决
使用Linux部署web项目,可能会遇到各种各样问题导致服务启动失败,以下是我近期部署项目遇到的问题以及解决方案 一.场景:把war包放入tomcat的webapps文件夹下,然后启动tomcat服务 ...