容器基础概念与原理

很多人认为 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 后,你就会明白为什么“容器本质上只是宿主机上的一个特殊进程”。

Navigation