04.Docker运行时有哪些组件
文章目录
问题: Docker运行时有哪些组件?
👇 点击展开/折叠 面试背诵模板(建议先背这个)
一、Docker引擎核心组件
Docker采用客户端-服务器(C/S)架构,由多个核心组件协同工作。
| 组件 | 说明 |
|---|---|
| Docker Daemon(dockerd) | Docker的后台守护进程,长期运行并管理容器、镜像、网络和卷等资源。负责监听来自Docker客户端的API请求 |
| Docker Client | 命令行工具(docker命令),用户通过它与Docker Daemon进行交互 |
| Docker REST API | 允许其他应用程序通过HTTP请求与Docker引擎通信 |
二、容器运行时栈(自顶向下)
Docker的容器运行时经过解耦,形成标准化的分层架构。
① Docker Daemon(dockerd)
Docker守护进程,是用户与容器交互的入口。当执行docker run时,客户端向Docker Daemon发送请求。
② containerd
Docker的容器运行时管理程序,负责容器的创建、启动、停止和销毁等生命周期管理。containerd是一个独立的守护进程,可单独运行,提供容器进程的隔离和管理功能。Docker Engine默认使用containerd管理容器生命周期。
③ containerd-shim
每个容器都会有一个与之关联的containerd-shim轻量级进程。它作为容器运行时和containerd之间的中介,负责监听容器的状态变化并报告给containerd。启动一个容器就会启动一个shim进程。shim允许使用备用运行时而无需更改Docker守护进程的配置。
④ runc
runc是轻量级的容器运行时工具,是OCI(Open Container Initiative)规范的一个参考实现。它直接与Linux内核的cgroups和命名空间功能交互,负责创建和运行容器。containerd默认使用runc作为其容器运行时。
三、底层支撑技术
Docker容器运行依赖Linux内核的以下关键技术:
| 技术 | 作用 |
|---|---|
| 命名空间(Namespaces) | 实现资源隔离,包括进程ID(PID)、网络(Network)、挂载点(Mount)、用户ID(User)、进程间通信(IPC)等 |
| 控制组(Cgroups) | 对容器的CPU、内存、磁盘I/O等资源进行限制、优先级分配和审计 |
| 联合文件系统(UnionFS) | 实现镜像的分层存储,多个容器可共享同一份基础镜像层,节省存储空间 |
四、组件协作流程(docker run为例)
- 用户执行
docker run命令,Docker Client通过REST API向Docker Daemon发送请求 - Docker Daemon调用containerd来创建和启动容器
- containerd启动containerd-shim进程,并通过runc创建容器
- runc利用Linux内核的命名空间和Cgroups创建隔离的容器进程
- containerd-shim持续监听容器状态变化并报告给containerd
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LGQ的博客!