K8s弃用Docker背后的故事及Docker与K8s的关系解析

创始人
2025-01-12 13:39:56
0 次浏览
0 评论

K8s为什么要弃用Docker?

在讨论K8s抛弃Docker的话题时,我们首先需要回到K8s发展早期,当时它与Docker结缘,共同探索容器化领域。
2014年,K8s刚刚诞生,Docker正处于鼎盛时期。
K8s的开发人员意识到Docker的潜力,并将其作为主要的容器运行时,这在当时看来是明智的选择。
然而,随着K8s的发展和CNCF的加入,它的野心逐渐超出了单一容器运行时的限制。
2016年1.5版本,K8s引入了CRI(ContainerRuntimeInterface),标志着与Docker正式分道扬镳。
CRI为K8s提供了与Docker解耦的能力,让K8s能够支持其他容器技术,比如rkt、kata等。
尽管Docker在市场上的影响力很强,但K8s在1.24版本中已经实现了“弃用Docker”的目标。
这一转变的关键在于CRI和shim的引入,它们作为中间层,保证K8s和Docker运行时之间的平滑过渡。
随后,Docker采取了重构策略,将自身拆分为多个模块,containerd诞生了。
作为CNCF托管项目,containerd遵循CRI标准,为K8s提供更加简洁高效的容器管理方法。
在性能测试中,containerd相比Docker提供了显着的改进,例如启动延迟降低了约20%,CPU使用率降低了68%,内存使用率降低了12%,这大大增加了云厂商的兴趣。
2020年,K8s正式宣布kubelet将弃用Docker支持,并将在未来版本中彻底删除。
这一决定引起了IT界的震动。
有人担心现有的Docker投资会被抹去,大量镜像将无处放置。
然而事实上,K8s只是放弃了dockershim,并没有完全放弃Docker。
其底层改为开源containerd,原来的Docker镜像和容器仍然可以正常运行。
K8s和Docker的分离对双方的影响有限。
K8s直接调用Docker内部的containerd,导致两者无法共享容器和镜像管理。
对于使用kubectl管理K8s的用户来说,这一变化并没有太大影响,但需要适应新工具crictl来查看容器和镜像。
虽然K8s不再与Docker绑定,但Docker在云原生领域仍然发挥着重要作用。
作为容器技术的奠基者,Docker的镜像格式标准化(OCI规范)使其能够在不改变原有开发测试和CI/CD流程的情况下,在K8s环境下保持兼容性。
Docker不仅仅是一个运行时,它还提供镜像构建、分发、测试等综合服务,甚至在DockerDesktop中内置了K8s功能。
对于初学者来说,Docker以其简单易用、工具链完整、界面友好等特点成为学习容器技术和云原生技术的最佳选择。
虽然与K8s的绑定减少了,但Docker继续通过cri-dockerd项目将CRI接口适配到DockerEngine,让K8s用户可以无缝过渡,就好像一切都没有改变一样。
Docker的未来仍然充满活力。
多年来积累的用户基础和广泛的应用形成了其强有力的支撑。
即使在与K8s分道扬镳之后,Docker仍然可以在容器开发领域发挥重要作用,为开发者提供便利。

Docker和K8s到底啥关系?想学K8s,必须得先学Docker吗?

Docker和K8s的关系Docker和K8s关系的讨论是很多初学者在开始学习K8s时遇到的常见问题。
要回答这个问题,首先需要了解Docker和K8的角色以及它们之间的交互。
Docker是目前流行的Linux容器解决方案,它使用命名空间、Cgroup和联合文件系统(UnionFS)在主机上的不同容器进程之间提供隔离。
K8s是一个具有容器编排功能的集群管理解决方案,允许您根据应用程序定义安排容器组件的执行。
K8s容器运行时支持Apache开源的CoreOS的Rkt容器(以前称为Rocket,现在更名为Rkt),只要该容器实现了K8s容器接口约定,就支持与各种容器对接,包括Mesos容器。
所有运行时都可以由K8s调度。
Docker发布了自己的容器集群管理解决方案DockerSwarm,与K8竞争,但在实际生产环境中很少使用。
DockerSwarm不受欢迎的根本原因包括与K8的竞争、功能定位和用户体验。
了解了K8s和Docker的关系后,我意识到学习K8s不需要先学习Docker。
然而,大多数情况下你会选择Docker。
使用码头工人。
不过,在学习K8的过程中,你的Docker熟练程度主要取决于你想通过K8实现的目标。
如果您正在构建MySQL或Redis等基础设施软件,这些软件已经包含容器映像,并且您不需要深入了解Docker的各种命令即可使用K8s。
您所需要做的就是为您的应用程序编写一个清单文件。
只需从清单文件下载图像并运行容器即可。
不过,学习K8s的重点是让你能够在K8s集群上运行服务,并利用K8s的集群管理和调度功能让你的服务更加健壮和可移植。
在此过程中,学习创建Dockerfile、打包、上传镜像的基本命令尤为重要。
掌握这部分知识大约需要2个小时。
我们建议您参考相关文章或教程。
总结综上所述,Docker和K8s是相关的,但具有不同的功能。
要学习K8s,不一定要从Docker开始。
掌握基本的Docker技能将使在实际应用中学习和使用K8变得更加容易。
K8很难上手,但随着练习的增多,它的价值逐渐显现出来。
热门文章
1
Redisson分布式锁深度解析:Red... Redis实现分布式锁+Redisson源码解析在某些场景下,多个进程需要以互斥...

2
深度解析Docker:容器技术提升应用部... docker是什么Docker是一种强大的开源容器技术,它将应用程序及其所有依赖...

3
K8s弃用Docker背后的故事及Doc... K8s为什么要弃用Docker?在讨论K8s抛弃Docker的话题时,我们首先需...

4
C语言文本输入输出教程:安全高效处理字符... C语言怎么变成文字?如果你想用C语言输入输出文本,其实很简单。您必须首先定义一个...

5
深入解析Java:面向对象编程特性与实现... Java语言的特点,实现机制和体系结构。中的任何实体都可以被视为一个对象。对象通...

6
三款免费Docker管理工具,提升您的可... 3款免费又好用的Docker可视化管理工具在Docker的世界里,命令行工具无疑...

7
C语言期末编程题解析:完整程序代码分享 C语言期末考试编程代码函数题?按照题目要求编写的完整程序如下(见图,图中重复的部...

8
轻松掌握:Redis键值查看技巧,两种方... 如何读取redis中的key值中的结果我们希望它能帮助您使用它。怎么查看redi...

9
SQL DELETE语句:详解及不同删除... 请问Sql的DELETE语句怎么写delete表示删除表中的数据示例:delet...

10
C语言教程:实现1到100整数输出与循环... c语言输出1到100所有整数解决这个问题的方法如下:1.首先,使用一个新项目和一...