内核,隔离机制,它用于虚拟化进程对 cgroup 文件系统的视图
它让容器内的进程“看到”一个独立的、被隔离的 cgroup 层次结构,而不是宿主机的真实 cgroup 树。
Cgroup(Control Group): 是 Linux 内核功能,用于限制、记录和隔离进程组使用的物理资源(如 CPU、内存、I/O 等)
-
Namespace: 是另一种内核功能,用于隔离系统资源视图(如 PID、网络、挂载点等),使一组进程拥有独立的“系统视野”。
解决不同的问题,但又协同工作
Namespace = "隔离墙" - 让你看不到墙外的其他房间(隔离视图)
Cgroup = "资源配额券" - 限制你能用多少水电煤(限制资源使用)
| 维度 | Namespace | Cgroup |
|---|---|---|
| 主要目的 | 隔离 - 让进程拥有独立的系统视图 | 限制 - 对进程组进行资源限制和统计 |
| 工作层面 | "视角"层面 - 隔离进程能"看到"什么 | "资源"层面 - 控制进程能"使用"多少 |
| 解决的问题 | "我在哪里?我能看到谁?" | "我能用多少CPU/内存?" |
| 操作对象 | 系统资源(PID、网络、文件系统等)的视图 | 物理资源(CPU、内存、IO等)的分配 |
| 隔离性 | 强隔离 - 互相看不见 | 弱隔离 - 主要是配额限制,不禁止访问 |
| 内核版本 | 从 2.4.19 开始逐步引入 | 从 2.6.24 开始引入 |
Namespace 的隔离能力 加上 Cgroup 的资源控制能力,才共同造就了现代容器技术既安全又高效的特性。
-
可以只有 Cgroup,没有 Namespace:
# 限制一个普通进程的资源,但不进行视图隔离 echo 1000000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us echo $$ > /sys/fs/cgroup/cpu/mygroup/cgroup.procs # 这个进程被限制CPU使用,但能看到系统所有其他进程
-
可以只有 Namespace,没有 Cgroup:
# 创建一个有完整Namespace隔离但无资源限制的进程 unshare --pid --mount --net --uts --ipc --user --map-root-user --fork bash # 这个进程有完整的隔离,但可能耗尽系统资
查看容器pid docker top container-id# 最实用的组合命令
echo "=== 当前运行的容器 ==="
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.PIDs}}" | \
while read line; do
if [[ $line == "NAME"* ]]; then
echo "$line 宿主机PID"
else
name=$(echo $line | awk '{print $1}')
pid=$(docker inspect --format '{{.State.Pid}}' $name 2>/dev/null || echo "N/A")
echo "$line $pid"
fi
done![image]()
-

浙公网安备 33010602011771号