容器化实现基于的技术
在容器化技术中,Linux 内核通过 6 大名称空间(Namespace)实现资源的隔离,每个名称空间负责隔离不同的系统资源,使得容器内的进程仿佛运行在独立的系统中。以下是这 6 大名称空间及其作用:
1. PID Namespace(进程隔离)
- 作用:隔离进程 ID(PID),容器内的进程只能看到同一命名空间内的进程,无法感知宿主机或其他容器的进程。
 - 示例:容器内 
ps aux仅显示容器自身的进程,而非宿主机的所有进程。 
2. Network Namespace(网络隔离)
- 作用:为容器提供独立的网络栈(网卡、IP、路由表、端口等),每个容器拥有自己的虚拟网络设备(如 
eth0)。 - 示例:容器可以绑定到 80 端口而不与宿主机的 80 端口冲突。
 
3. Mount Namespace(文件系统隔离)
- 作用:隔离文件系统挂载点,容器可以拥有独立的根文件系统(
/)和挂载目录(如/proc、/sys)。 - 示例:容器内的文件修改不会影响宿主机或其他容器。
 
4. UTS Namespace(主机名隔离)
- 作用:允许容器拥有独立的主机名(
hostname)和域名(domainname)。 - 示例:在容器内执行 
hostname my-container不会修改宿主机的主机名。 
5. IPC Namespace(进程间通信隔离)
- 作用:隔离进程间通信(IPC)资源,如信号量、消息队列和共享内存,防止容器间通信干扰。
 - 示例:两个容器无法通过共享内存(
shmget)直接交换数据。 
6. User Namespace(用户权限隔离)
- 作用:隔离用户和用户组 ID,容器内可以以 root 用户运行,但实际映射到宿主机的非特权用户(增强安全性)。
 - 示例:容器内 
root用户的 UID 可能是宿主机的普通用户(如 UID 1000)。 
补充说明
- cgroups(控制组):与 Namespace 配合使用,负责资源限制(CPU、内存等),但并非隔离机制。
 - Capabilities:进一步细化权限控制(如限制容器使用 
NET_ADMIN权限)。 
总结表
| 名称空间 | 隔离资源 | 关键作用 | 
|---|---|---|
| PID Namespace | 进程 ID | 防止容器看到宿主机进程 | 
| Network Namespace | 网络设备、IP、端口 | 容器拥有独立网络栈 | 
| Mount Namespace | 文件系统挂载点 | 隔离根文件系统 | 
| UTS Namespace | 主机名和域名 | 自定义容器主机名 | 
| IPC Namespace | 进程间通信(信号量、消息队列等) | 防止容器间 IPC 干扰 | 
| User Namespace | 用户和用户组 ID | 映射容器内 root 到宿主机非特权用户 | 
通过这 6 大名称空间,容器实现了轻量级的资源隔离,这是 Docker、Kubernetes 等技术的底层基础。
