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很难上手,但随着练习的增多,它的价值逐渐显现出来。
下一篇:
C语言实现:如何判断一个整数是否为质数?
相关文章

C语言EOF结束输入:SCANF读取字符...
2025-03-26 23:10:01
SQL多表连接技巧:内连接、外连接与子查...
2024-12-31 02:07:27
旧手机变智能中枢:Android编程与智...
2024-12-28 00:48:45
C语言教程:命令行数字字符串转整数函数实...
2024-12-17 06:55:30
群晖/极空间Docker挂载阿里云盘教程...
2025-03-26 13:25:34
C语言编程:自编strcmp函数实现字符...
2024-12-29 07:16:53
Java实现:输入10个数排序及统计正负...
2024-12-27 03:19:48
深度解析:同步与异步、阻塞与非阻塞,以及...
2024-12-23 13:05:21
C语言字符变量交换与SCANF函数使用教...
2025-03-19 14:22:30
Java面试高频问题盘点:从基础到进阶,...
2024-12-16 04:07:59最新文章
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
13
2025-04
热门文章
1
OpenWrt Docker环境下部署多...
n1刷openwrt上面的DOCKER有什么用独立的程序和结构。Docker将应...
2
Redisson分布式锁深度解析:Red...
Redis实现分布式锁+Redisson源码解析在某些场景下,多个进程需要以互斥...
3
Java程序员简历IT技能描述指南:精准...
Java程序员简历IT技能怎么写Java程序员简历中的技能描述应该具体、有针对性...
4
Redis分布式锁事故复盘:揭秘超卖背后...
一次由Redis分布式锁造成的重大事故,避免以后踩坑!使用基于Redis的分布式...
5
深度解析Docker:容器技术提升应用部...
docker是什么Docker是一种强大的开源容器技术,它将应用程序及其所有依赖...
6
C语言科学计数法1.25e+3详解:12...
C语言中的1.25e+3表示多少呢?在C-语言中,1 .2 5 E+3 是一个真...
7
K8S网络核心:CNI0与Docker0...
浅谈k8s中cni0和docker0的关系和区别CNI0 DOI被替换在K8 S...
8
Docker容器重启技巧:实现持续运行与...
Docker 重启服务,容器全部退出的解决dockerrun -srestart...
9
Docker网络模式深度解析:五大模式详...
Docker 的网络模型新桥梁:容器中容器中容器中的容器中有六个网络。容器通常连...
10
C语言实现三数比较:求最大值和最小值教程
c语言编程:输入三个数,输出他们的最小值,要求定义一个函数,反悔两个数的最小值#...