docker相关进程的作用

docker相关进程的作用

  • 一、核心守护进程
    • [1.1 dockerd:Docker 主守护进程](#1.1 dockerd:Docker 主守护进程)
    • [1.2 docker-proxy:Docker 端口映射代理进程](#1.2 docker-proxy:Docker 端口映射代理进程)
  • 二、容器运行时进程
    • [2.1 containerd:容器运行时核心](#2.1 containerd:容器运行时核心)
    • [2.2 containerd-shim-runc-v2:容器 "垫片" 进程](#2.2 containerd-shim-runc-v2:容器 “垫片” 进程)
    • [2.3 runc:底层容器创建工具(轻量级)](#2.3 runc:底层容器创建工具(轻量级))
  • 三、容器的启动过程

一、核心守护进程

这类进程是 Docker 服务的基础,负责接收用户指令、管理容器生命周期、协调底层资源,是 Docker 运行的核心

1.1 dockerd:Docker 主守护进程

核心作用:Docker 最核心的后台进程,相当于整个 Docker 系统的 "管理器",处理所有容器相关的核心逻辑

具体功能:

  • 接收并解析用户通过 docker 命令行工具(CLI)发送的指令(如 docker run、docker stop)
  • 管理容器的全生命周期:创建、启动、暂停、停止、删除
  • 管理 Docker 镜像:拉取、推送、构建、删除镜像
  • 分配和管理底层资源:为容器分配 CPU、内存、PID 等系统资源,通过 Linux 内核特性(如 Namespace、Cgroups)实现容器隔离
  • 提供 API 接口:默认监听 unix:///var/run/docker.sock Unix 套接字,支持外部工具(如 Docker Compose、Kubernetes)通过 API 调用 Docker 功能

启动方式:通常通过系统服务管理(如 systemctl start docker),启动时会加载配置文件(/etc/docker/daemon.json)

1.2 docker-proxy:Docker 端口映射代理进程

核心作用:解决容器网络 "隔离" 与 "外部访问" 的矛盾,实现宿主机端口到容器端口的流量转发

工作场景:当使用 docker run -p 宿主机端口:容器端口(如 -p 8080:80)映射端口时,dockerd 会自动启动一个 docker-proxy 进程

具体功能:

  • 监听宿主机指定端口的 TCP/UDP 流量(如宿主机的 8080 端口)
  • 将接收到的流量转发到容器内部对应的端口(如容器的 80 端口)
  • 处理 "容器 IP 动态变化" 的问题:即使容器重启后 IP 改变,docker-proxy 仍能通过容器名称 / ID 定位容器,保证端口映射不失效

进程特征:每一个端口映射规则(-p)对应一个独立的 docker-proxy 进程,进程名通常包含端口信息(如 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.2 -container-port 80)


二、容器运行时进程

这类进程直接与容器关联,是容器内应用运行的 "载体",负责容器的隔离、资源限制和信号处理

2.1 containerd:容器运行时核心

核心定位:Docker 从 18.09 版本开始,将 containerd 作为默认的容器运行时(替代早期的 docker-runc 直接调用),负责容器的底层运行逻辑,是 dockerd 与内核之间的 "中间层"

具体功能:

  • 接收 dockerd 的指令,管理容器的启停、暂停、删除等操作
  • 管理容器的镜像分层和存储:负责从镜像仓库拉取镜像、解压镜像分层,并为容器挂载根文件系统
  • 调用底层运行时创建容器:通过 runc 与 Linux 内核交互,创建 Namespace和 Cgroups
  • 管理容器的网络和存储插件:对接 Docker 网络(如 bridge、overlay)和存储(如 overlay2、bind mount)

进程特征:通常只有一个主进程 containerd,但会衍生多个子进程(如 containerd-shim-runc-v2)对应不同容器

2.2 containerd-shim-runc-v2:容器 "垫片" 进程

核心作用:作为 containerd 与 runc 之间的 "垫片 ",解耦容器运行时与主进程,保证容器的稳定性

具体功能:

  • 隔离 containerd 与容器:即使 containerd 重启,containerd-shim-runc-v2 仍能维持容器运行(避免 containerd 故障导致容器崩溃)
  • 管理容器的 PID 命名空间:为容器提供独立的 PID 空间,容器内的 PID 1 进程(如 bash、nginx)由其管理
  • 处理容器的信号转发:将宿主机发送的信号转发到容器内的主进程
  • 收集容器的日志和退出状态:将容器的标准输出转发到 Docker 日志驱动(如 json-file),并记录容器的退出码

进程特征:每个运行中的容器对应一个 containerd-shim-runc-v2 进程,进程名包含容器 ID(如 containerd-shim-runc-v2 -namespace moby -id abc123... -address /run/containerd/containerd.sock)

2.3 runc:底层容器创建工具(轻量级)

核心定位:runc 是一个符合 OCI(开放容器倡议)标准的轻量级容器运行时工具,不常驻后台,仅在创建 / 销毁容器时被调用

具体功能:

  • 接收 containerd 的指令,直接与 Linux 内核交互,创建容器所需的 Namespace 和 Cgroups
  • 为容器挂载根文件系统,设置容器的网络、用户、环境变量等配置
  • 启动容器内的主进程,并将进程 PID 反馈给 containerd-shim-runc-v2

进程特征:runc 是 "一次性" 进程,容器创建完成后会自动退出,不常驻内存

容器内主进程(如 nginx、bash)

核心作用:容器的 "业务进程",容器的生命周期与该进程强绑定(进程退出,容器也会退出,除非配置了 --restart 策略)


三、容器的启动过程

用户执行 docker run → docker CLI → dockerd(主守护进程) → containerd(运行时) → containerd-shim(垫片进程) → runc(OCI 运行时) → 容器内主进程启动

  • 当用户通过DockerCLl启动一个容器时,DockerDaemon会将请求转发给containerd
  • containerd解析请求,拉取镜像(如果需要),并创建容器
  • containerd启动containerd-shim-runc-v2进程,并将容器配置传递给它
  • containerd-shim-runc-v2调用runc创建并启动容器进程
  • containerd-shim-runc-v2监控容器进程,并将容器的状态和日志返回给containerd
相关推荐
iconball3 小时前
个人用云计算学习笔记 --14( Linux 逻辑卷管理、Linux 交换空间管理)
linux·运维·笔记·学习·云计算
峰顶听歌的鲸鱼3 小时前
32.Linux NFS 服务
linux·运维·服务器·笔记·学习方法
Ting-yu3 小时前
零基础学Docker(5)--容器数据卷
运维·docker·容器
SunnyJim3 小时前
k8s etcd 运行错误 failed to find plugin “flannel“ in path [/usr/lib/cni]
容器·kubernetes·etcd
oh,huoyuyan3 小时前
选型指南 | 2025年业务流程自动化(rpa)软件排名Top5
运维·自动化·rpa
伊织code3 小时前
N8N Workflow Collection - 专业级自动化工作流库
运维·自动化·工作流·n8n
Java-云海3 小时前
使用Python实现自动编写Word全自动化系统
运维·python·自动化·word
埃伊蟹黄面3 小时前
Linux基础开发工具 --- vim
linux·运维·服务器
love530love3 小时前
Windows 系统部署 阿里团队开源的先进大规模视频生成模型 Wan2.2 教程——基于 EPGF 架构
运维·人工智能·windows·python·架构·开源·大模型