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

相关推荐
架构师那点事儿9 小时前
大模型如何私有化部署到生产环境
人工智能·架构·llm
lightning_bug10 小时前
Windows系统Docker+SpringBoot+H5+Mysql+Redis打包部署流程
后端·架构
还卿一钵无情泪11 小时前
Docker 部署Unsloth 绕开环境配置难题
运维·人工智能·docker·ai·容器·nlp·干货
Mr_Mao12 小时前
百分百 AI 开发下的架构腐败
架构
打工仔折腾 AI12 小时前
Docker镜像分层与卷挂载到底怎么工作:一次文件系统层面的实测分析
运维·人工智能·后端·python·docker·容器·性能优化
吴建旭 智宅焕13 小时前
智能家居全国交付计价模型的设计与实现:按天包干与交付确定性架构
架构·智能家居
Experience-摆渡13 小时前
Agent 持久记忆引擎 Hindsight:分层记忆架构与 Token Budget 机制拆解
架构
极客先躯13 小时前
高级java每日一道面试题-2026年01月20日-实战篇[Docker]-如何实现镜像的跨区域复制?
java·运维·docker·容器·架构图
星航夜空的帆舟13 小时前
OceanBase源码架构总览
架构·oceanbase
guslegend13 小时前
脚手架入门:必要性、核心功能与执行原理
前端·架构·node.js·脚手架·前端工程化