容器化实现基于的技术
在容器化技术中,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 等技术的底层基础。