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 内核 → 容器运行

相关推荐
梦梦代码精15 分钟前
开源AI应用平台BuildingAI解析:插件化架构、应用市场与热门案例
人工智能·机器学习·docker·开源
dogstarhuang17 分钟前
从 0 到 1 搭建可收费的 API 开放平台(实战)
java·架构·api
GIoT801019 分钟前
自动化请求的智能重试策略:指数退避 + 熔断 + IP 轮换
架构
葬送的代码人生28 分钟前
从 Vue 到 React:Tailwind CSS 布局 + BFF 代理实战
前端·react.js·架构
hunterandroid2 小时前
[鸿蒙从零到一] ArkUI 组件化实战:构建可复用、可组合的自定义组件
前端·华为·架构
IT瑞先生2 小时前
Docker快速部署Mysql的三种方法——实操篇
mysql·adb·docker
梦远青城3 小时前
Docker 部署python的paddle进行OCR文字识别身份证
python·docker·ocr·paddle·身份证识别
CodexDave4 小时前
数据库连接池耗尽:排查顺序与三层兜底
服务器·前端·数据库·git·云原生·容器·kubernetes
luyingying4 小时前
我的AI NPC差点失声:多平台容错路由的完整踩坑记录
架构
java_logo4 小时前
ELK Docker Compose 部署指南:轻松搭建日志检索平台
elk·elasticsearch·docker·容器·kibana·logstash·轩辕镜像