docker概念
我们需要知道的是docker1.11版本之后
1.docker架构图
由图可知:我们所常说的docker基本需要了解下面三个概念
1. client:通常部署在/usr/bin/docker
2. 服务端 dockerd(守护进程daemon):通常部署在/usr/bin/dockerd,或者systemctl daemon-reload
3. containerd:容器管理工具
一般的步骤:client给dockerd服务端进程发送请求,然后dockerd再给containerd发送请求进行对容器的操作
2.docker.sock到底是什么
- docker.sock其实就是linux系统上的不同进程之间的通信套接字,是为了适配不同进程可以和linux系统进行通信,比如你的应用是python,就需要用到sock,就可以转化为linux可以识别的
- 当安装了docker后,守护进程(daemon)会自动创建一个sock文件:/var/run/docker.sock,而且会时刻监听这个sock文件,当client发送请求时,是给sock文件发的请求,守护进程监听到然后再通过containerd来进行操作,containerd也不是直接操作容器,而是通过containerd.shim来操作和linux系统更相近的runc来执行容器的创建等操作。
2.1 docker.sock的用处
一般会挂载在容器中,容器中可以有docker client,通过docker.sock直连宿主机上的dockerd,进而来操作容器。
3.概念
OCI:容器运行时接口
CNI:容器网络接口(如下图,是跟flannel等网络插件相关)
CRI: k8s使用的容器进行时接口
4.k8s和docker的恩怨情仇
首先,docker先产生,然后k8s再生出来的。
docker最开始跟containerd一块生活(同宗,后面分开了),然后k8s为了适应docker,自己开发了docker-shim来适配docker进而操作容器。
k8s1.24版本后,不想再通过docker来操作containerd了,于是自己开发了cri-containerd来直接操作containerd,但是ctr命令不为大众接受哇。
docker一看自己没啥价值了,而且k8s自己的ctl等命令不好用,于是自己又开发出一套cri-dockerd来操作containerd,只为了大众还能使用docker命令
如下图看kubelet启动容器的过程:
通过命令px aux|grep kubelet
也可查看到kubelet使用的是containerd还是cri-dockerd
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律