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
相关推荐
海宇AI6 小时前
零信任架构实战:基于海宇个人风险报告构建自动化分期商城信用额度初审网关
运维·人工智能·架构·自动化
IMPYLH6 小时前
Linux 的时间为什么会被拨回去
linux·运维·服务器
2601_963282777 小时前
寒地窄带通信工程实践:黑龙江哈尔滨对讲机选型、组网与合规运维总结
运维·服务器·网络
叼烟扛炮8 小时前
[Git 实战] 学习笔记:从生成 SSH 密钥到解决 TortoiseGit 推送报错全指南
linux·运维·笔记·git·学习
我要见SA姐19 小时前
GitHub Actions 自动化:5 个真实运维提效案例
运维·数据库·机器学习·oracle·回归
Android系统攻城狮10 小时前
Linux FFmpeg深度解析之avcodec_flush_buffers调用流程与实战(十九)
linux·运维·服务器·ffmpeg·车载音视频·ffmpeg音视频进阶
Y38153266211 小时前
用 httpx 写 SerpBase 异步客户端:连接池与超时配置
运维·服务器·数据库
倔强的石头10611 小时前
【Linux指南】进程通信系列(七):System V 信号量 —— 同步互斥的内核原语
linux·运维·服务器
废柴程序员_熊熊12 小时前
10 分钟用 Docker 搭一套私有 Gitea:HTTPS、SSH、CI、备份一次配齐
docker
HZZD_HZZD13 小时前
大口径摄像水表白皮书拆解:DN40加装改造与字轮识别实测
运维·物联网·腾讯云