Docker 兴衰记:关于开源的一些思考

Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet uses a module called “dockershim” which implements CRI support for Docker and it has seen maintenance issues in the Kubernetes community. We encourage you to evaluate moving to a container runtime that is a full-fledged implementation of CRI (v1alpha1 or v1 compliant) as they become available. (#94624, @dims) [SIG Node]

上述引言来自 Kubernetes 1.120 的 Release Note,标志着 Docker 的丧钟进入尾声。事实上,当 2018 年 Docker 创始人 CTO Solomon Hykes 宣布离职时,Docker 和公司的命运已是江河日下。在复杂商业利益的驱使和一意孤行的错误决策下,从 2016 年至今诞生了 CRI、OCI 等标准和 Containerd、Runc、Docker-shim、CRI-O 等眼花缭乱却、功能盘龙交错重叠的项目,Kubelet 和容器运行时的调用链路复杂冗长且多次变化,整个生态为此苦不堪言。

回想 1981 年 IBM 推出 PC 时,采用了非常开放的标准,凝聚了硬件和软件的生态,迅速占据市场第一把交椅。开放也导致了广大廉价而有竞争力的兼容机出现,渐渐蚕食 IBM 的市场份额。于是 1987 年 IBM 从开放走向封闭,推出一款不再兼容外部硬件的机器 IBM PS/2,彻底走上了一条不归路,失去市场的同时失去了 PC 产业话语权。让我们再次回顾 Docker 从一鸣惊人再到由盛而衰的历史,并思考开源商业、技术和文化和内在逻辑和一些教训。

小船出海

PaaS 历来是兵家必争之地,通过类似 Container 技术将应用封装并交由编排系统管理,将给 DevOps 带来巨大的效率和成本优化。2002 年诞生的 linux namespace 和 2006 年诞生的 cgroup 为此奠定基本技术基础,此后 Google 和百度依次建设了 Borg 和 Matrix 平台,并取得巨大的成功;与此同时开源界也诞生了 Cloud Foundry 等项目。但在外人看来,Borg 和 Matrix 只闻其名,未见其实;而 Cloud Foundry 一直不愠不火,未得到广泛的普及。

究其根本原因乃是对应用(交付)的标准抽象的不过友好。以 Cloud Foundry 为例,它针对每种语言指定了一系列的标准,比如目录、可执行文件、二进制等等。这用在内部场景用无可厚非,绝大部分上规模的公司都会为应用设定一系列的规则,比如编码、配置、打包、运行环境和依赖,并形成各自的特色的标准;但是放眼整个生态,这种要求过于苛刻而缺乏普及性。Docker 真正革命之处在于开创了基于镜像交付应用的先河,它把应用的代码、配置和所有用户态层次依赖的整合成一个镜像,保证了运行环境的高度闭环和统一,对宿主机的依赖仅限于内核,而内核的 posix 接口非常稳定和兼容,所以保证了 docker 镜像具有一次制作,四处运行的强大兼容强大威力。

2013 年,成立三年的 dotCloud(Docker 公司前身) 在 PaaS 平台产品商业化走到穷途末路时选择了开源核心引擎 Docker,换来的是柳暗花明又一村。这种轻量级虚拟化、语音无关、可移植性强的技术给出完美的应用交付标准,直击用户痛点,立马一石激起千层浪。这一年,Docker 迅速成长为云计算领域最受欢迎的项目,诸多巨头逐步增加了对 docker 的支持,很多应用软件的交付也提供了 docker 镜像;这一年,dotCloud 更名为 Docker,注册了 Docker 商标,出售了 PaaS 平台产品,全力转向 Docker 技术研发和生态建设。

此后的两年里,Docker 的发展可谓顺风顺水,生态版图持续扩大,从 linux 到 windows,从云计算到广义的应用市场,已俨然成为容器的标准。即使 Google 和 CoreOS 强势推出竞品 lmctfy 和 rkt,面对已成气候的 Docker 毫无招架之力。伴随生态的成功,Docker 前后拿下 4000万刀和 9500万刀的两轮重要融资补充粮草。当 2016 年夏天 DockerCon 举办时,Docker Hub 镜像总下载数量高达 40 多亿次,甚至一度传出微软欲以 40 亿美金收购这家只有数百人的公司!

群雄逐鹿

技术的持续发展离不开商业化的支持,Docker 作为一家创业公司从出身就背负着商业化的根本任务。尽管取得生态和技术上的巨大成功,带来了普世的巨大价值,却面临着商业化的巨大挑战。和其它通用而基础的开源技术一样,比如操作系统 linux、编译工具 gcc、虚拟化技术 qemu-kvm,开源决定了 Liscense 之路不通,而单一的技术无法带来服务的溢价。打造 PaaS 平台层次的产品便成最具备可行性之路,和 2013 年卖掉 PaaS 平台相反,2014 年 Docker 收购 Fig 项目,以此推出编排产品 Docker Swarm,拉开了编排领域群雄逐鹿的帷幕。

开源的长河充满了合作和竞争,推动着生态不断发展和演进。这一年,Mesos 背后的公司 Mesospheres 推出 Marathon 项目;Google 基于 Borg 推出开源版本的编排项目 Kubernetes。和 Google、Redhat 等深谙道理的老玩家相比,年少气盛的 Docker 公司显得不易相处,2014 年 Docker 项目最早积极贡献者 CoreOS 不久后分道扬镳,和 Google、Redhat 创建了 OCI 规范,定义了容器运行时标准,妥协之下 Docker 公司从 libcontainer 捐献出 RunC 项目作为符合 OCI 标准的容器运行时。2015 年 Google、Redhat 等共同发起了 CNFC 基金会,并迅速增加了 Prometheus、Etcd、Helm、CNI 等众多知名项目,生态发展的风向标逐步由 Docker 转向 Kubernetes,开始建造了坚固的护城河。

当时间来到 2016 年时,一切尘埃落定,远去了鼓角争鸣,Kubernetes 已成了容器编排领域的绝对标准。和暴发户 Docker 如日中天变得专横独断相比,K8S 民主化的风格和 Plugin 的架构迅速的吸引了周边的生态伙伴;其次 K8S 源自于 Google 基础设施领域多年的宝贵实践和升华,其设计的理念和抽象形态更贴近本质的需求。

即使 K8S 赢得编排的标准,由于 Docker 已成容器的标准,所以早期的 Kubelet 内嵌 Docker 客户端,默认其为容器的运行时,因而从 Kubelet 到容器运行时的代码整体比较路径简短优雅 —— 容器的归容器、编排的归编排。但之后 Docker 公司祭出以自杀八百、损敌一千的姿态做出损人不利己的骚招。在面对 Swarm 的失败后,由于 Docker 名声和美誉广为人知,于是公司将 PaaS 平台的能力沉淀到名为 Docker 产品(甚至集成了 K8S),并将 docker 项目改名为 moby,压上名气这张最后的筹码孤注一掷。

群雄逐鹿过程中,Docker 和 K8S 之间的纠葛埋下广大同行深受其苦的坑,从 Kubelet 到运行时主要经历了如下调用链路的变更,诞生了一堆临时和更多凑热闹的项目,给广大的开发者带来沉重的心智负担,留下一地鸡毛。

+-----------------------+    +---------+    +-----------+
| Kubelet(Dockerclient) | -> | Dockerd | -> | Container |
+-----------------------+    +---------+    +-----------+

+--------------+    +-------------+    +---------+    +------------+    +------+    +------------+
| Kubelet(CRI) | -> | Docker-shim | -> | Dockerd | -> | Containerd | -> | Runc | -> | Containers |
+--------------+    +-------------+    +---------+.   +------------+    +------+    +------------+

+--------------+    +----------------+    +------------+    +------+    +-----------+
| Kubelet(CRI) | -> | CRI-Containerd | -> | Containerd | -> | RunC | -> | Container | 
+--------------+    +----------------+    +------------+    +------+    +-----------+

+--------------+    +------------+    +------+    +-----------+
| Kubelet(CRI) | -> | Containerd | -> | RunC | -> | Container | 
+--------------+    +------------+    +------+    +-----------+

最佳选择

有些历史被成为绝唱,那是因为没如果和重来。但是似曾相识的故事总是在不断的轮回,上世纪八十年代,蓝色巨人坐拥拥无人可撼动的市场霸主地位,当它试图以一己之力关闭兼容机的大门时,换来了作茧自缚。巅峰时期的 Docker 在生态上虽然取得了巨大的成功,但它的地位和当年的 IBM 丝毫不能相提并论,当然,这也是马后炮式的分析。

让我们站在 Docker 的曾经的巅峰上,俯瞰整个应用的交付标准唯我独尊,Docker hub 囊括了海量应用镜像,和下一个 “vmware” 相比,微软抛出区区 40 亿美金收购的橄榄枝又是多么的微不足道,我想换成任何人都愿意跃跃欲试,放手一搏向 PaaS 平台进军。当错失闪烁瞬间的机会后,便是土崩瓦解般的故事,2018 年创始人兼 CTO 离职,2019 年裁员,2020 年 dockerhub 离奇的推出限速下载。

从商业的视角来看,基础而通用的开源技术项目本身价值和需求重大,但是成功的商业故事却寥寥无几。开源注定卖 License 之路不通,单一的基础技术很难带来服务的溢价,技术培训、二次开发的收益则是杯水车薪,而捐助等对于一家数百人的公司更天方夜谭,所以特别对于基础通用的技术来说,开源几乎不可能成为商业模式。但是从另外一个角度来说,开源更是一种市场策略,它可以快速试错,推广产品和思路,获得用户粘性,构建生态的护城河。如果顺着这个思路,从短期盈利的价值来看,Docker 公司卖给微软和 AWS 是中策,背靠着金主爸爸和强大的云计算服务;从长远的生态和普世价值角度来看,我认为 Redhat 收购 Docker 应该是最佳的选择,以 Redhat 的智慧,或将带来全方位的共赢和持久的繁荣。可以说,对于绝大部分做基础通用的开源技术产品的创业公司来说,被巨头收购已是最好的结局。

正如《大教堂和集市》所言:“开放式的文化会最终胜利,这或许不是因为”开放”在道德上正确,或者”封闭”在道德上错误,而只是因为开放式合作可以在一个问题上投入多几个数量级的技术工时,封闭的世界无法赢得这样的竞争。”当 Docker 开源时,它以新颖的理念解决应用交付的巨大痛点,描绘了 PaaS 的新蓝图,吸引了广泛的合作者。但是 Docker 的管理者既没有充分的识别和吸收他人优秀的想法,更没有良好的人际关系、交流技能和人格魅力。先后和 CoreOS、Redhat、Google 等开源巨头分道扬镳,最后又为一己之利和生态背离。开源生态的发展如一股大洪流滚滚向前,只能顺势和引领,不可阻挡,妄图借垄断之势损坏普遍大众的利益的行为只会被这股洪流冲垮和抛弃。

回首这八年,Docker 已到棺盖定论之时,它掀起了一场轰轰烈烈的 PaaS 革命,给 DevOps、云原生等带来了巨大的理念突破和奠定技术基础;而管理者的战略和战术的种种失误措施良机,接连败北,丢失了商业市场,失去了生态和名声,拉下一地鸡毛。数年以后,容器一词依旧盛行,而 Docker 或将无人提及,唯有一声叹息。

来源:

http://wsfdl.com/%E7%BC%96%E7%A8%8B%E9%9A%8F%E6%83%B3/2021/03/09/docker_story.html

(0)

相关推荐

  • 不讲武德!Kubernetes要弃用Docker

    什么?Kubernetes 决定弃用 Docker? 这是真的.Kubernetes 现已弃用 Docker. https://github.com/kubernetes/kubernetes/blo ...

  • Docker已死?听听他怎么说

    2020年底,Kubernetes在当时最新的Changelog中宣布,自V1.20后将弃用Docker,一石激起千层浪.Docker镜像不能用了?Podman难道要取Docker而代之? 此后唱衰D ...

  • 部署 Asp.Net Core 应用到 Docker

    前言: 今天不说Docker 是啥,容器是啥镜像又是啥(如果这些不知道,请自行学习),今天很单纯的将 .Net Core 应用程序部署到Docker上. 起因: 好多同学私信让我写篇能落地的[一步步] ...

  • 解读容器的 2020:寻找云原生的下一站

    2020 年注定是不凡的.它在阴霾中开始,在惊叹中结束,也让未来变得更加扑朔迷离.那么,容器与云原生的 2020 年呢?你是否记得它是怎样开始的?它又将走向何方? Kubernetes:企业基础设施的 ...

  • kubernetes1.20用containerd替换docker(shim)

    kubernetes 1.20 要去掉对 Docker的支持,具体看这里,本篇文章介绍用 containerd 替换 docker,从work节点开始,然后才到master节点. 首先查看集群 [ro ...

  • 老公趴下!62图给你讲Docker

    前言 第一趴---Docker容器圈简介 Docker容器圈简介 第二趴---Docker基本操作 Docker基本操作 容器圈 容器这个新生事物,现在还可以说是新生事物吗?对于我们学生而言,我觉得没 ...

  • 在欢呼声中矗立,在批评声中倒坍,上海城墙兴衰记

    说起古城墙,人们总会想到西安.南京等地,你可知道,在摩天高楼林立的大上海也有饱经历史沧桑的古城墙? 在黄浦区人民路和大镜路交界处,就有着一段古城墙,这是上海先民给予后人的珍贵历史遗产.   上海城墙成 ...

  • 档案《致命武器 王八盒子兴衰记》

    档案《致命武器 王八盒子兴衰记》

  • 南高天主教兴衰记

    汲取文史智慧  引以鉴古知今 ❈ 忻州的天主教,始于清朝康熙年间.相传城西南兰村乡肖家峪有武姓名家和者以赶牲口运输为业,来往于京晋之间,偶尔驮运外籍传教士,遂信天主教,返乡后劝家属.亲族入教,从此天主 ...

  • 汉唐“特区”——凉州兴衰记

    汉唐经济文化之所以能享誉世界皆因胸怀坦荡,高举"开放"大旗.作为丝绸之路主干道的组成部分,河西走廊是大一统王朝开疆拓土,对外交流的前沿阵地,更是各路商旅汇集.各种风物荟萃的大舞台. ...

  • 网红民宿十年兴衰记:为什么它们依然站在潮头?

    曾几何时,它们是网红民宿的代表,在莫干山古堡里,在大理喜洲村头,在厦门渔村小镇,将美好生活定格在乡野,将大城市的熙攘喧嚣隔绝在房子外.而现在,它们是中国精品民宿品牌的代表,将自己的物业带到新兴旅游城市 ...

  • 罗马帝国兴衰记(5) 克劳狄王朝

    鉴于罗马论坛在罗马,意大利 第二部分:前期帝国 由恺撒和奥古斯都屋大维所奠定的强大基础,使罗马帝国繁盛了200年.但屋大维的继承者提贝里乌斯时期,却埋下了日后毁灭的因素. 一.朱里亚.克劳狄王朝(公元 ...

  • 王营织布厂兴衰记(上)

    王营织布厂兴衰记(上) □戴官宝 封建社会,苏北大平原广大地区还处在农耕文明时期,工业几乎是空白,手工业少之又少,人们果腹的食物来自大地的恩赐和勤劳的双手,抵御寒冷的衣被要手工捻纱,用土方法去完成,和 ...

  • 兴和铸造厂兴衰记

    〓 第 1337 期 〓 小时候,听说公社里有个铁木合作社,铸犁铧.灶火门子,后来也能翻砂铸锅了.木工做铁犁把手.犁底.修花车.修扇车.做家俱等等. 我上初中的时候,铁木合作社就开始西迁到公社所在地村 ...

  • 菜鸟记246-有图表不用文字系列之13-制作二级部门还带平均值的图表,99.99%的人可能都没从这个角度思考!

    关键词: EXCEL2016:图表:折线图操作难度*** 温馨提示:在小菜的公众号中以"图表"为关键词,搜索往期分享文章收获更大. 还记得前几天小菜和您分享的带整体平均值的柱形图吗 ...