Docker 整体架构(C/S 模式)

架构核心组件与流程

  1. Docker Client(客户端)

    • 用户交互入口:docker CLI、Docker Desktop
    • 发送命令(run/build/pull)→ 通过 REST API 发给守护进程
  2. Docker Daemon(dockerd,守护进程)

    • 核心大脑:管理镜像、容器、网络、卷
    • 内部:API Server + 镜像 / 容器 / 网络 / 存储管理器
    • 不直接跑容器 → 交给 containerd
  3. containerd(高层运行时)

    • 容器生命周期管理、镜像分发、存储 / 网络调度
    • 调用底层 runc 真正创建容器
  4. runc(OCI 标准底层运行时)

    • 直接调用 Linux 内核:Namespace(隔离)、Cgroup(资源限制)、Capabilities
    • 真正把容器进程跑起来
  5. Registry(镜像仓库)

    • 存储 / 分发镜像:Docker Hub(公共)、Harbor(私有)
    • docker pull/push 与守护进程交互
  6. 底层内核技术

    • Namespaces:PID、网络、挂载、用户、UTS、IPC 隔离
    • Cgroups:CPU / 内存 / IO 配额限制
    • UnionFS(如 OverlayFS):镜像分层、写时复制

数据流

docker run → Client → dockerd → containerd → runc → Linux 内核 → 容器启动

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    用户层 / 交互层                           │
│  ┌─────────────┐  ┌────────────┐  ┌───────────────────────┐ │
│  │ Docker CLI  │  │ Docker API │  │ Docker Desktop / UI  │ │
│  │ (docker run,│  │ (HTTP API)│  │                       │ │
│  │ build,push) │  │            │  │                       │ │
│  └─────────────┘  └────────────┘  └───────────────────────┘ │
└───────────────────────────┬─────────────────────────────────┘
                            │
                            ▼
┌─────────────────────────────────────────────────────────────┐
│                  Docker Daemon (dockerd)                     │
│  ┌─────────────┐  ┌────────────┐  ┌───────────┐  ┌─────────┐ │
│  │ API Server  │  │镜像管理器  │  │容器管理器 │  │网络/存储│ │
│  │ (接收请求)  │  │(pull/push)│  │(生命周期) │  │ 管理器   │ │
│  └─────────────┘  └────────────┘  └───────────┘  └─────────┘ │
└───────────────────────────┬─────────────────────────────────┘
                            │
                            ▼
┌─────────────────────────────────────────────────────────────┐
│                      containerd (容器运行时)                 │
│  ┌──────────────┐  ┌───────────────┐  ┌───────────────────┐ │
│  │ 镜像分发     │  │容器生命周期    │  │ 任务调度 (supervisor)│ │
│  │ (管理镜像层) │  │(start/stop)   │  │                   │ │
│  └──────────────┘  └───────────────┘  └───────────────────┘ │
└───────────────────────────┬─────────────────────────────────┘
                            │
                            ▼
┌─────────────────────────────────────────────────────────────┐
│                       runc (OCI 标准运行时)                 │
│  真正调用 Linux 内核,创建容器进程                           │
│  - Namespace (PID/Net/Mount/User/UTS/IPC)                   │
│  - Cgroup (CPU/内存/IO 限制)                               │
│  - Rootfs 挂载、权限控制                                    │
└───────────────────────────┬─────────────────────────────────┘
                            │
                            ▼
┌─────────────────────────────────────────────────────────────┐
│                      Linux 内核                             │
└─────────────────────────────────────────────────────────────┘

各组件详细职责

1. 用户交互层

  • Docker CLI 我们常用的 docker run / build / pull / ps / exec 等命令。
  • Docker APIdockerd 暴露 REST 接口,供外部程序调用。
  • Docker Desktop / UI图形化界面,本质还是调用 API。

2. Docker Daemon(dockerd)

Docker 的核心守护进程,负责:

  • 接收客户端请求
  • 管理镜像、容器、网络、数据卷
  • 不直接创建容器,而是把任务交给 containerd

从 Docker 1.11 开始,dockerd 不再直接管理容器,全部下沉到 containerd。


3. containerd(高层容器运行时)

CNCF 项目,Docker 捐赠,现在也是 Kubernetes 默认运行时。负责:

  • 镜像管理(下载、解压、分层)
  • 容器生命周期(启动、停止、删除)
  • 管理 runc 实例
  • 提供稳定的运行时接口

4. runc(底层 OCI 运行时)

OCI(开放容器标准)官方实现,真正创建容器的组件。作用:

  • 利用 Linux Namespace 实现隔离
  • 利用 Cgroup 做资源限制
  • 挂载 rootfs
  • 启动容器 init 进程

5. Linux 内核支撑技术

  • Namespace:6 种隔离PID、Network、Mount、User、UTS、IPC
  • Cgroup:资源限制CPU、内存、磁盘 IO、网络带宽
  • UnionFS(Overlay2):镜像分层、写时复制

6. 配套外围组件

  • Registry:镜像仓库(Docker Hub、Harbor)
  • Volume:数据持久化
  • Network:bridge/host/overlay/macvlan 等

完整启动流程

docker run → CLI → dockerd → containerd → runc → Linux 内核 → 容器运行

相关推荐
雨奔21 小时前
Kubernetes 联邦 Deployment 指南:跨集群统一管理 Pod
java·容器·kubernetes
空中海1 天前
第四篇:Unity高级阶段(架构级开发能力)
unity·架构·游戏引擎
heimeiyingwang1 天前
【架构实战】FinOps云成本优化实践
前端·chrome·架构
2601_949814691 天前
Docker部署Spring Boot + Vue项目
vue.js·spring boot·docker
雨奔1 天前
Kubernetes StatefulSet 详解:有状态服务的部署与管理实战
云原生·容器·kubernetes
成为你的宁宁1 天前
【K8s ConfigMap 配置管理创建、挂载与热更新实践】
云原生·容器·kubernetes
Agent产品评测局1 天前
如何搭建一个药品市场价格监控智能体来实现100%价格一致性? —— 2026全渠道价格均衡化架构实战指南
人工智能·ai·chatgpt·架构
Cosolar1 天前
大模型应用开发工程师 · 学习路线(完整技术栈版)
人工智能·面试·架构
Xingxing?!1 天前
Java 后端分层架构详解
java·架构·状态模式
刀法如飞1 天前
一款Python语言Django框架DDD脚手架,开箱即用
python·架构·django