Docker是云原生核心,下面我详解Docker运行机制@mikechen
Docker
Docker作为容器化技术的代表,已经成为现代应用交付与云原生架构的基石。
被广泛用于 微服务部署、持续集成、云原生架构 等场景。

理解其运行机制有助于构建高效、可移植与安全的部署流程。
Docker架构
Docker架构如下所示:

+----------------+
| Docker Client |
+----------------+
|
| REST API
|
+----------------+
| Docker Daemon |
+----------------+
|
|
+----------------+
| Containerd |
+----------------+
|
|
+----------------+
| runc |
+----------------+
|
|
+----------------+
| Linux Kernel |
+----------------+
从整体视角看,Docker 大致可以画成三层:
最上层:用户指令层
命令行:docker run / build / ps / stop
SDK / API 调用
中间层:引擎调度层
Docker Daemon:接收命令、调度容器
containerd:负责容器的生命周期管理
shim / runc:具体创建和启动容器进程
最底层:操作系统内核能力
Namespace:做“看见什么”的隔离
Cgroups:做“能用多少”的限制
UnionFS / OverlayFS:做“镜像分层和写时复制”。
Docker组件
包含如下组件:

1 Docker Client
Docker Client 是用户与 Docker 交互的入口。
常见命令:
docker run;
docker pull;
docker build;
执行命令时,本质是通过 REST API 向 Docker Daemon 发送请求。
示例:
docker run nginx
2 Docker Daemon
Docker Daemon 是 Docker 的 核心后台服务。
主要负责:
管理镜像;
管理容器;
管理网络;
调度容器运行;
Docker Daemon 监听:/var/run/docker.sock
所有 Docker 命令最终都会发送到这里。
3 Containerd
Containerd 是 Docker 的 容器运行时管理组件。
核心职责:
管理容器生命周期;
管理镜像;
管理容器运行状态;
Docker 通过 containerd 调用更底层组件。
4 runc
runc 是真正 创建容器的工具。
作用:
创建容器;
设置 Namespace;
设置 Cgroups;
启动容器进程。
Docker运行机制
Docker的运行机制核心在于:以Linux内核的命名空间、与cgroup实现轻量隔离与资源控制。

Linux Namespace 提供了不同的“隔离维度”:
PID Namespace:进程号隔离,每个容器都有自己的 PID 1;
NET Namespace:网络隔离,每个容器有独立网卡、路由表等;
MNT Namespace:挂载点隔离,每个容器有自己看到的文件系统挂载;
UTS Namespace:主机名、域名隔离;
IPC Namespace:进程间通信资源隔离。
Namespace 解决的是“隔离视图”,Cgroups 解决的是“资源配额”:
常见的资源限制:
CPU:限制 CPU 使用比例、绑定某几个核;
内存:限制最大可用内存,超限会触发 OOM;
I/O:限制磁盘读写速率;
PIDs:限制容器内最多能创建多少进程。
借助分层镜像与联合挂载实现高效的镜像管理,并通过按需的运行时(containerd、runc)将用户意图化为内核级进程。