1.3 Docker 引擎拆分的四个组件功能介绍

docker 项目,自 1.11.0 版本起,docker 引擎由一个单一组件,被拆分为四个项目分别是:

1、docker-daemon;2、containerd;3、containerd-shim;4、runc

 

Docker 引擎拆分的四个组件各自承担不同职责,形成了一个分层协作的容器生命周期管理架构:

  1. dockerd (Docker Daemon)‌

    • ‌作用‌:对外提供 Docker API(如 CLI 命令、RESTful 接口),接收用户的操作请求(如创建容器、构建镜像)。
    • ‌定位‌:作为 Docker 的对外入口层,负责高层命令解析与资源调度,但不直接操作容器。
  2. containerd

    • ‌作用‌:
      • 管理容器的生命周期(创建、启动、暂停、销毁);
      • 管理镜像分发(拉取、推送、存储);
      • 调用底层 containerd-shim 执行容器操作。
    • ‌定位‌:核心运行时管理层,解耦了 Docker Daemon 与底层容器运行时,提供标准化接口(gRPC API)供上层调用。
  3. containerd-shim

    • ‌作用‌:
      • 作为容器的运行时载体,托管容器进程;
      • 屏蔽底层运行时细节,确保 containerd 无状态化(重启 containerd 不影响容器运行);
      • 收集并转发容器退出状态。
    • ‌定位‌:适配层,隔离运行时与容器管理器,增强稳定性与可维护性。
  4. runc

    • ‌作用‌:
      • 根据 ‌OCI(Open Container Initiative)标准‌ 创建和运行容器;
      • 调用操作系统内核功能(如命名空间、cgroups)实现容器隔离。
    • ‌定位‌:底层容器运行时,仅专注于容器进程的启动/停止,是轻量级标准化工具。

四组件协作流程示例

当运行 docker run 时:

  1. dockerd 接收命令 →
  2. containerd 解析请求,准备镜像和配置 →
  3. containerd 调用 containerd-shim →
  4. containerd-shim 启动 runc →
  5. runc 创建隔离环境并启动容器进程。

💡 ‌架构优势‌:

  • ‌解耦与模块化‌:各组件专注单一职责,升级/替换更灵活(如替换 runc 为其他 OCI 运行时);
  • ‌稳定性‌:containerd-shim 隔离运行时故障,避免级联崩溃;
  • ‌标准化‌:runc 遵循 OCI 规范,推动容器生态兼容性。

注:早期 Docker 引擎是单体架构(dockerd 直接管理容器),拆分后提升了跨平台能力和可维护性。

posted @ 2025-06-26 11:44  david_cloud  阅读(69)  评论(0)    收藏  举报