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
相关推荐
啦啦啦啦啦zzzz16 分钟前
5种IO模型
运维·服务器·网络·c++
FreeTinker26 分钟前
企业存储服务器NAS的选型逻辑与补充路径
运维·服务器
呱呱巨基29 分钟前
Docker 基础概念学习
linux·c++·学习·docker
acrel732 分钟前
算力机房供电不间断,智能电力运维保驾护航
运维·安全·机房电力运维·机房配电·列头柜监测
mengpp_1234561 小时前
物联网云平台可以离线使用吗?摒弃云端依赖,工业现场离线自动化解决方案
运维·物联网·自动化·华为云
Acrellea2 小时前
ADL200W/ADL400W 导轨电表:一块小表终结光储防逆流之痛
运维·能源
xiaoxiangsiyan2 小时前
企业网络运维自动化与管理协议深度指南
linux·运维·服务器·网络·学习·自动化
七仔啊2 小时前
windows server 2022 安装 Linux Docker
linux·windows·docker
GlueNa2SiO32 小时前
07-Docker Compose多容器编排
笔记·学习·docker·容器
AIgorithmGEEK2 小时前
Linux 进程控制完全指南:fork、wait、exec 三部曲
linux·运维·多进程·进程创建·进程等待·进程终止·exec家族