容器基础概念与原理
很多人认为 Docker 就是容器,但实际上 Docker 只是容器的一种管理工具。容器技术是 Linux 内核原生支持的一组特性,理解了这些底层原理,你就能明白为什么容器比虚拟机更轻量。
1. 容器 vs 虚拟机 (VM)
- 原理: 虚拟化硬件,运行完整的操作系统。
- 优点: 强隔离,安全性高。
- 缺点: 启动慢(分钟级),资源开销大(GB 级)。
- 原理: 共享宿主机内核,利用进程级隔离。
- 优点: 极速启动(秒级),极其轻量(MB 级)。
- 缺点: 隔离性弱于虚拟机。
2. 容器的三大支柱
容器之所以能够实现“看起来像个独立的系统”,主要依赖于 Linux 内核的三个关键技术:
2.1 Namespace (命名空间) —— 实现隔离
Namespace 负责将全局系统资源包装在一个抽象中,使得进程认为自己拥有独立的资源。
- PID Namespace: 进程隔离(容器内 PID 为 1,宿主机看到的是另一个 PID)。
- NET Namespace: 网络隔离(独立的 IP、端口、路由表)。
- MNT Namespace: 文件挂载隔离(容器拥有自己的根文件系统)。
- UTS Namespace: 主机名与域名隔离。
2.2 Cgroups (控制组) —— 实现资源限制
隔离了资源但不限制使用量也是危险的。Cgroups (Control Groups) 负责给进程“戴上紧箍咒”。
- 内存上限: 防止容器撑爆宿主机内存。
- CPU 份额: 确保容器在高负载下不抢占过多的 CPU 时间。
- 磁盘 IO: 限制读写速度。
2.3 UnionFS (联合文件系统) —— 实现分层镜像
容器镜像采用“写时复制 (Copy-on-Write)”机制。
- 镜像是只读的。
- 启动容器时,会在镜像顶层挂载一个可读写层。
- 所有的修改都发生在可写层,删除容器后,可写层消失,原始镜像完好无损。
3. 容器的生命周期
4. 结业练习
▶ 动手验证 Namespace 隔离
你可以尝试运行以下命令,看看容器内的进程列表是否与宿主机一致:
# 在宿主机查看
ps aux | wc -l
# 进入容器查看
docker run -it alpine ps aux你会发现容器内只有极少数进程,这就是 PID Namespace 的魔力。
Tip
深入理解了 Namespace 和 Cgroups 后,你就会明白为什么“容器本质上只是宿主机上的一个特殊进程”。