Docker是大型架构核心,下面我详解Docker底层原理@mikechen
Namespace:实现“看起来像独立机器”的隔离能力
Namespace 是 Docker 实现“容器隔离”的核心技术之一。

为了让多个容器彼此隔离、互不干扰,Docker 依赖 Linux 的 Namespace 机制。
Namespace 的作用,是让进程“看到”的系统资源视图彼此不同。
也就是说,同一台宿主机上的不同容器,可以各自拥有独立的进程编号、网络、挂载点、主机名等视图,仿佛它们运行在不同的操作系统中。
常见的 Namespace 包括:
| Namespace | 隔离内容 |
|---|---|
| PID | 进程 |
| NET | 网络 |
| MNT | 文件系统挂载点 |
| UTS | 主机名 |
| IPC | 进程间通信 |
| USER | 用户和用户组 |
| CGROUP | Cgroup视图 |
正是这些隔离机制,使得 Docker 容器具备了“轻量虚拟化”的特征。
它不需要为每个环境启动完整操作系统,而只是为进程提供独立的运行视图,因此启动速度快、资源占用小。
二、Cgroups:实现“不能无限制占资源”的控制能力
如果说 Namespace 负责“隔离”,那么 Cgroups(Control Groups) 负责的就是“限制与统计”。

容器可以共享宿主机内核,但不能无限制地占用 CPU、内存、磁盘 I/O 等资源,否则会影响整台机器的稳定性。
Cgroups 正是用来管理这一问题的核心机制。
通过 Cgroups,Docker 可以对容器施加资源配额,例如:
- 限制 CPU 使用率,防止某个容器长期占满处理器;
- 限制内存上限,避免容器因内存泄漏拖垮宿主机;
- 限制磁盘读写速率,避免 I/O 争抢;
- 统计资源使用情况,便于监控和调优。
举例来说,当管理员为容器设置 --memory=512m 时。
Docker 实际上会借助内核的 Cgroups 子系统,将该容器可用内存控制在 512MB 左右。
一旦超过限制,进程可能会被系统回收甚至被 OOM Kill(内存不足杀死)。
三、UnionFS:实现“镜像分层核心机制
Docker 的第三个核心原理是 UnionFS(联合文件系统)。

它解决的是容器镜像如何高效存储、分发和运行的问题。
Docker 镜像并不是一个单独的大文件,而是由多层只读层叠加而成。
每一层都代表构建过程中的一个步骤,例如安装基础系统、复制应用代码、安装依赖等。
多个镜像之间可以共享相同的基础层,从而减少磁盘占用并提升分发效率。