Docker是大型架构的必备技能,下面我重点详解Docker底层原理@mikechen
Docker容器
从内核视角看,Docker 不是“虚拟一台机器”,而是用 Linux 内核现成能力。
把一组进程“关在一个隔离的圈子里”,并给它挂上一套分层文件系统和镜像规范。

Namespace:做“视图隔离”,让容器看到的是“自己的世界”,包括进程、网络、挂载点、主机名等。
cgroups:做“资源限制与计量”,限制每组进程能用多少 CPU、内存、IO 等,防止一个容器吃光宿主机资源。
联合文件系统(UnionFS/OverlayFS 等):做“镜像分层与写时复制”。
大量镜像共享底层只读层,新容器只在最上层写入改动。
这 几个合在一起,才构成我们平时看到的“Docker容器”。
Namespaces:进程隔离的基础
Namespaces 提供了内核级别的资源视图隔离,使得容器内的进程拥有独立的命名空间视角。

包括:进程ID(PID)、网络(NET)、文件系统挂载(MNT)、用户(USER)、主机名(UTS)和IPC。
通过将进程绑定到独立的 Namespace,容器内的进程看不到或无法干预宿主机。
或其他容器的资源,从而实现进程间隔离与安全边界。
Control Groups (cgroups):资源限制与控制
cgroups 用于对容器消费的 CPU、内存、磁盘 I/O、网络带宽等系统资源进行限制、分配和统计。

借助 cgroups,运维者可以为每个容器设置资源上限与优先级。
防止单个容器耗尽宿主机资源,保证多租户环境下的资源公平与稳定性。
镜像分层与构建缓存:可重复性与高效传输
Docker 镜像由一系列只读层组成,每一层对应 Dockerfile 中的一个构建指令。

分层设计带来两个重要优势:第一,构建缓存可复用先前层,缩短构建时间。
第二,网络传输时仅需传输发生变化的层,提高拉取效率。
此外,分层也便于版本管理与回滚操作,增强镜像的可管理性与可追溯性。