Docker底层原理揭秘(看完彻底懂了)

Docker是大型架构核心,下面我详解Docker底层原理@mikechen

Namespace:实现“看起来像独立机器”的隔离能力

Namespace 是 Docker 实现“容器隔离”的核心技术之一。

Docker底层原理揭秘(看完彻底懂了)-mikechen

为了让多个容器彼此隔离、互不干扰,Docker 依赖 Linux 的 Namespace 机制。

Namespace 的作用,是让进程“看到”的系统资源视图彼此不同。

也就是说,同一台宿主机上的不同容器,可以各自拥有独立的进程编号、网络、挂载点、主机名等视图,仿佛它们运行在不同的操作系统中。

常见的 Namespace 包括:

Namespace 隔离内容
PID 进程
NET 网络
MNT 文件系统挂载点
UTS 主机名
IPC 进程间通信
USER 用户和用户组
CGROUP Cgroup视图

正是这些隔离机制,使得 Docker 容器具备了“轻量虚拟化”的特征。

它不需要为每个环境启动完整操作系统,而只是为进程提供独立的运行视图,因此启动速度快、资源占用小。

 

二、Cgroups:实现“不能无限制占资源”的控制能力

如果说 Namespace 负责“隔离”,那么 Cgroups(Control Groups) 负责的就是“限制与统计”。

Docker底层原理揭秘(看完彻底懂了)-mikechen

容器可以共享宿主机内核,但不能无限制地占用 CPU、内存、磁盘 I/O 等资源,否则会影响整台机器的稳定性。

Cgroups 正是用来管理这一问题的核心机制。

通过 Cgroups,Docker 可以对容器施加资源配额,例如:

  • 限制 CPU 使用率,防止某个容器长期占满处理器;
  • 限制内存上限,避免容器因内存泄漏拖垮宿主机;
  • 限制磁盘读写速率,避免 I/O 争抢;
  • 统计资源使用情况,便于监控和调优。

举例来说,当管理员为容器设置 --memory=512m 时。

Docker 实际上会借助内核的 Cgroups 子系统,将该容器可用内存控制在 512MB 左右。

一旦超过限制,进程可能会被系统回收甚至被 OOM Kill(内存不足杀死)。

 

三、UnionFS:实现“镜像分层核心机制

Docker 的第三个核心原理是 UnionFS(联合文件系统)。

Docker底层原理揭秘(看完彻底懂了)-mikechen

它解决的是容器镜像如何高效存储、分发和运行的问题。

Docker 镜像并不是一个单独的大文件,而是由多层只读层叠加而成。

每一层都代表构建过程中的一个步骤,例如安装基础系统、复制应用代码、安装依赖等。

多个镜像之间可以共享相同的基础层,从而减少磁盘占用并提升分发效率。

评论交流
    说说你的看法