Part III · 汇成一朵云 · 第 7 章
07
容器:轻量的幻觉
容器不启动另一套内核。它把普通进程放进 namespace 与 cgroup 编织的边界里,让它看见一个被裁剪过的世界。
0先把地图摊开
容器不启动另一套内核。它把普通进程放进 namespace 与 cgroup 编织的边界里,让它看见一个被裁剪过的世界。 本章不会把概念排成术语表,而是沿着一条真实系统路径走:先看它解决什么痛点,再看 OS/云平台怎样实现,最后回到工程取舍。
Namespace改变进程能看见什么:进程号、网络、挂载点、主机名等。
cgroup限制进程能用多少:CPU、内存、I/O 等资源配额。
镜像层容器镜像由只读层叠起来,启动时加一个可写层。
运行时负责拉镜像、设置隔离、启动容器进程的系统组件。
7.1容器首先是进程
如果你只记一句:容器不是小虚拟机,而是被隔离和限制的进程。它共享宿主机内核,所以启动快、密度高,也意味着内核隔离边界比 VM 更薄。
7.2Namespace 改变“看见的世界”
PID namespace 让容器里的进程以为自己是 1 号进程;network namespace 给它独立网卡和路由表;mount namespace 让它看到自己的文件系统。幻觉来自视野被重写。
7.3cgroup 改变“能用的资源”
如果 namespace 是视觉隔离,cgroup 就是预算控制。CPU share、memory limit、I/O throttle 让容器不会无边界地吃掉宿主资源。
7.4镜像让环境可复制
镜像把文件系统和依赖固定成层。层的复用让发布快,digest 让内容可验证。Dockerfile 不是部署脚本,而是构造可重复运行环境的配方。
7.5容器为什么适合云原生
因为它启动快、打包清晰、资源边界明确,适合被调度器成批创建、销毁、替换。Kubernetes 的 Pod,本质就是容器加上一层调度与网络约定。
↔云与 OS 的桥
这一章不是孤立知识点。下面这张表把它和前后章节接起来:你会看到,同一个机制在单机、云平台和 AI 基建里会换名字,但问题结构没变。
| 本章机制 | 云上形态 | 为什么重要 |
|---|---|---|
| Namespace | Pod 网络、sidecar、service mesh | 很多 Kubernetes 行为都是 namespace 组合的结果。 |
| cgroup | requests/limits、OOMKilled | 资源配置错误会直接变成调度和稳定性问题。 |
| 镜像层 | CI/CD、供应链安全 | 可复现环境同时带来版本、漏洞和 provenance 问题。 |
深潜 读完本章后,怎么确认自己真的懂了?›
不要只背定义。你应该能把一个线上现象翻译回机制:慢在哪里、谁在排队、哪个抽象漏了、哪个资源被过度承诺。下面三个检查点可以当成小作业。
本章收束 · 你现在握住了什么
- 容器是被 namespace 隔离、被 cgroup 限制的进程。
- 它共享宿主内核,所以比 VM 轻,也比 VM 隔离边界薄。
- 镜像层让环境可复制,是云原生发布的基本单位。
- Kubernetes 在容器之上提供调度、网络和自愈约定。
容器和 VM 都要接请求。下一章我们把网络铺开,看请求怎样在云里找到正确的目标。