容器技术中的一种,你知道吗?又是什么?

什么是码头工人?什么是 OCI?什么是显色指数?什么是容器化和TM?你觉得这个概念很混乱吗?

造成这一切混乱的根本原因是利益各异的公司之间的竞争。商业竞争给用户造成混乱,尤其是当每个公司都在宣传自己的技术概念时。

接下来,我会尝试按照我自己的理解方式为大家解读一下这些他妈的术语,让大家对容器技术有更多的了解。如果你在使用 docker,你会发现这个容器时代的可怜领袖正在慢慢失去一切。

Docker 不是一切

自从docker加入镜像仓库,引爆了容器技术,很多人认为docker代表了整个容器。这种观点很常见,主要是因为docker太火了。即便 k8s 官方第二次宣布弃用 docker,其热度依旧不减。

事实上,现阶段,docker只是众多容器技术中的一种。它包含三个主要概念。

Docker 是运行时和开发工具集合的总称。不用说,docker-cli 是命令行的集合。我们主要看运行时。

你可能很奇怪,一个小小的docker怎么会有这么多层!按照常识,我只需要一个客户端,一个守护进程就足够了。这么多层怎么拆分?

这是由于历史发展的原因。为了解耦和实现OCI标准,不得不对docker的组件进行拆解和拆解,最终形成松耦合的架构。后来随着k8s加入竞争,出现了一个新名词:CRI。接下来我们综合k8s,看看各个组件中存在的层。

两个标准分裂了世界

之所以这么复杂,主要是因为增加了两个标准。显色指数和 OCI。下面这张大图大致反映了它们之间的关系。

OCI的全称是Open Container Initiative,它被定义为容器运行时的标准。这个标准,使用了 Linux 的 cgroups 和 namespaces 等技术,与 docker 使用的技术没有什么不同。docker 只不过是 OCI 的实现,就像 gVisor (runsc) 实现的一样。

CRI是Container Runtime Interface的全称,是k8s定义的一组与容器运行时交互的接口。containerd 是 docker 为适应该标准而开发的 CRI 实现,但它已经归 CNCF 所有,不再属于 docker。

当然,除了containerd,其他厂商也可以基于CRI-O做一些事情,也可以实现CRI接口。这允许无缝访问 k8s,例如使用 CRI-O 的 Redhat 的 OpenShift。但是对于集装箱的真正调度,其实是OCI负责的,CRI只是一个中转站。例如,原本属于 CRI-O 项目的 Podman,现在可以直接运行 runc 来启动容器。

整个docker系统被两个标准砍了两次,组件多也就不足为奇了。

在早期版本中,k8s 必须包含一个名为 dockershim 的组件才能支持 docker。后来,k8s 宣布不再支持 docker。事实上什么是程序包,它放弃了 dockershim 组件。我们仍然可以使用 containerd 来调用 docker 的所有功能。

“k8s 不再支持 docker”,这个文字游戏让很多人过早地放弃了 docker。

总结

2020 年 12 月 8 日,k8s 再次发表了一篇关于弃用 docker 的文章。

这种文字游戏无疑会给docker再一次暴击。很多公司其实都把docker跑的很好,但是当主流调度系统这么说话的时候什么是程序包,就需要研究一些类似的技术来应对可能的技术变化。

早在 2014 年,Docker 的商业化态度还是非常强硬的。先后得罪了coreos、redhat等一系列组织,拒绝谷歌合作推出中性容器。从关系的亲密到敌意,也是无限的。CNCF云原生基金的成立宣告了docker商业化的失败,docker甚至自创了开源版本的moby。编排和调度丢了,概念分叉了,这一切都让docker慢慢失去了话语权。

事实证明,docker的母公司无法支撑起云原生这么大的蛋糕。大众汽车还是要选择一些巨头公司,然后爬到它的脚下。

这个选择,CNCF,仍然是一个相对开放的组织。相比之下,docker 是一个商业产品。受益于开源,podman 的定位是取代 docker,后者由 redhat 出品。

不开源会害死你,这是docker的最终结果。但是开源呢?目前大部分开源行业只是集体为谷歌、亚马逊、甲骨文等几家巨头做免费工作。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论