容器化

一、容器的第一性原理

1.1 容器是什么(本质定义)

容器不是虚拟机,不是轻量级 OS,而是一组受约束的进程集合。

容器 = 进程 + 受限视图 + 受控资源 + 安全策略

其成立依赖一个根本事实:

操作系统本身就是资源管理与隔离系统

Linux 内核早已具备:

容器化只是将这些能力组合、产品化、标准化


1.2 为什么容器不需要“虚拟硬件”

对比维度虚拟机容器
虚拟化层级硬件层操作系统层
是否包含内核
隔离对象OS 实例进程视图
资源开销

关键差异并不在“轻量”,而在“抽象层级”。


二、容器系统的统一抽象模型

2.1 容器的五大构成要素

┌─────────────────────────────────┐│            Container             ││ ┌──────────────┐ ┌────────────┐ ││ │ 视图隔离     │ │ 资源控制   │ ││ │ Namespace    │ │ Cgroups    │ ││ └──────────────┘ └────────────┘ ││ ┌────────────────────────────┐ ││ │ 文件系统视图(rootfs)     │ ││ └────────────────────────────┘ ││ ┌────────────────────────────┐ ││ │ 进程模型(PID 1 / 信号)   │ ││ └────────────────────────────┘ ││ ┌────────────────────────────┐ ││ │ 安全策略(Caps / UserNS)  │ ││ └────────────────────────────┘ │└─────────────────────────────────┘

容器并非单一技术,而是多个内核子系统的协作结果


2.2 稳定知识与易变知识分层

层级内容稳定性
第一性原理进程隔离、资源分配极高
架构模式Namespace + Cgroup
内核机制CFS、OOM、OverlayFS
实现工具Docker / CRI

本文聚焦前两层,第三层作为支撑,第四层仅作示例。


三、视图隔离:Namespace 的设计哲学

3.1 Namespace 的本质

Namespace 不是“安全机制”,而是“视图重映射机制”。

它回答的问题是:

“这个进程能看到什么?”

而不是:

“这个进程能做什么?”


3.2 Namespace 的分类抽象

Namespace隔离对象设计目的
PID进程号空间进程树独立
Mount文件系统路径视图独立
Network网络栈网络拓扑独立
UTS主机标识系统身份独立
IPC进程通信通信边界
User用户身份权限映射

它们共同完成:对“同一内核,不同世界”的构造。


四、资源控制:Cgroups 的系统模型

4.1 Cgroups 的第一性原理

资源不是无限的,必须被公平、可控地分配。

Cgroups 解决的问题是:


4.2 Cgroups 的设计模式

子系统控制维度核心哲学
CPU时间片公平 + 上限
Memory页面生存优先
IO带宽 / IOPS系统整体稳定

Cgroups 不追求性能最大化,而追求系统可预测性


4.3 v1 → v2 的演进逻辑

v2 的本质变化不是 API,而是:

从“子系统视角”转为“进程组视角”

这使资源治理逻辑更加一致、可组合。


五、容器的进程模型

5.1 PID 1 的系统含义

在容器中,PID 1 并不是普通进程,而是:

一个不正确的 PID 1,会导致整个容器的资源泄露。


5.2 信号与退出的设计哲学

容器停止 = 对“进程树”的有序拆解,而非简单 kill。


六、文件系统视图:rootfs 与分层

2022122413485

6.1 rootfs 的本质

rootfs 不是 OS,而是:进程运行所需最小文件视图集合

容器镜像 ≠ 操作系统容器镜像 = 运行时依赖快照


6.2 分层与 Copy-on-Write 的哲学

分层设计解决的不是功能问题,而是:

这是工程规模问题的系统性解法


七、网络:性能、隔离与复杂性的权衡

7.1 Network Namespace 的抽象

Network Namespace = 一套完整的网络协议栈视图。

容器网络的复杂性来自:

既要隔离,又要互通。


7.2 网络方案的权衡模型

方案优势代价适用
veth通用softirq默认
macvlan高性能无 NAT高吞吐
Overlay跨主机封包云环境
BGP原生运维复杂大规模

八、安全模型:边界而非绝对隔离

8.1 容器安全的核心事实

容器安全 ≠ VM 级安全

它依赖:


8.2 User Namespace 与 Rootless 的意义

这是容器安全演进中最关键的一步:

将“root”变成一种相对概念。


九、编排系统的抽象价值

容器编排系统并不关心“怎么跑进程”,而关心:

Kubernetes 是:

分布式操作系统的控制平面雏形


十、容器化的长期工程哲学

10.1 三个不可违背的原则

  1. 最小化原则

    • 权限最小
    • 镜像最小
    • 能力最小
  2. 可观测性优先

    • 资源可见
    • 行为可追踪
  3. 失败是常态

    • OOM 会发生
    • 重启是设计的一部分

关联内容(自动生成)