加载中...
命名空间(namespace)是 Linux 内核的一种隔离机制,它把全局系统资源包装成独立的视图,使不同命名空间中的进程各自“以为”自己独占该资源,互不可见。
内核目前提供八种命名空间:PID(进程号)、NET(网络设备与端口)、MNT(挂载点)、UTS(主机名)、IPC(进程间通信)、USER(用户与权限映射)、CGROUP(cgroup 根视图)和 TIME(系统时钟偏移)。例如在新的 PID 命名空间里,第一个进程的进程号是 1;在新的 NET 命名空间里有独立的网卡、路由表和防火墙规则。
进程可通过 clone、unshare、setns 等系统调用创建或加入命名空间,命令行下也可用 unshare、nsenter 工具操作。USER 命名空间还支持把容器内的 root 映射为宿主机上的普通用户,是 rootless 容器的关键。
Docker 等容器本质上就是“若干命名空间 + cgroups + 独立根文件系统”组合出来的普通进程。理解命名空间是理解容器不是虚拟机、共享宿主内核这一本质的关键。
登录 后参与讨论
暂无讨论,来发表第一条评论吧