专业格泰网站建设,广告公司广告牌制作,国外开发网站,漯河市源汇区网站建设目录
1 引言#xff1a;为什么需要Namespace#xff1f;
2 Namespace的核心概念
2.1 什么是Namespace#xff1f;
2.2 Docker使用的6种Namespace
3 Namespace的底层原理
3.1 Namespace创建流程
3.2 查看进程的Namespace
4 各Namespace详解
4.1 PID Namespace
4.2 …目录
1 引言为什么需要Namespace
2 Namespace的核心概念
2.1 什么是Namespace
2.2 Docker使用的6种Namespace
3 Namespace的底层原理
3.1 Namespace创建流程
3.2 查看进程的Namespace
4 各Namespace详解
4.1 PID Namespace
4.2 Network Namespace
4.3 Mount Namespace
4.4 User Namespace
5 Namespace的局限性
6 总结
附录常用命令速查 1 引言为什么需要Namespace 在传统的Linux系统中所有进程共享相同的全局资源如进程ID、网络接口、文件系统挂载点等这种设计会导致 资源冲突和 安全问题例如 两个进程可能使用相同的PID进程ID导致管理混乱普通用户可能看到其他用户的进程或网络配置存在信息泄露风险 Docker通过Namespace技术实现资源隔离使得每个容器拥有独立的系统视图仿佛运行在单独的Linux主机上。 2 Namespace的核心概念
2.1 什么是Namespace Namespace是Linux内核的一项功能用于 隔离系统资源使得不同Namespace中的进程拥有独立的 进程树PID Namespace网络接口Network Namespace文件系统挂载点Mount Namespace用户和用户组User Namespace 2.2 Docker使用的6种Namespace Namespace类型 作用 Docker中的应用场景 PID 隔离进程ID 容器内进程无法看到宿主机或其他容器的进程 Network 隔离网络设备、IP、端口 每个容器拥有独立的网络栈如docker0 Mount 隔离文件系统挂载点 容器内只能看到自己的文件系统 UTS 隔离主机名和域名 容器可以设置自己的hostname IPC 隔离进程间通信如信号量、共享内存 避免容器间通信干扰 User 隔离用户和用户组 容器内可以映射不同的UID/GID 3 Namespace的底层原理
3.1 Namespace创建流程 clone()系统调用Docker通过clone()而非fork()创建新进程并传入CLONE_NEW*标志如CLONE_NEWPID内核分配新NamespaceLinux内核为进程分配独立的资源视图容器进程运行在隔离环境进程只能看到当前Namespace内的资源 3.2 查看进程的Namespace 每个进程的Namespace信息存储在/proc//ns/目录下 # 查看Docker容器的Namespace
docker inspect container_id --format {{.State.Pid}} # 获取容器PID
ls -l /proc/pid/ns/ # 查看Namespace文件描述符 4 各Namespace详解
4.1 PID Namespace 作用隔离进程ID使容器内进程的PID从1开始计数验证方法 # 在容器内运行
docker run -it my-app sh
ps aux # 只能看到容器内的进程PID 1通常是sh或init进程 宿主机可以通过nsenter进入容器的PID Namespace nsenter --target pid --pid
# 进入容器的进程空间 4.2 Network Namespace 作用隔离网络设备、IP地址、路由表等Docker网络模型 相关命令 # 查看容器的Network Namespace
ip netns list # 需先创建符号链接
docker exec container_id ip addr # 查看容器内网络配置 4.3 Mount Namespace 作用隔离文件系统挂载点使容器拥有独立的/目录示例 # 在容器内挂载临时文件系统
docker run -it --rm my-app sh
mount -t tmpfs tmpfs /mnt # 仅影响当前容器 4.4 User Namespace 作用映射容器内外的UID/GID提升安全性如容器内root≠宿主机root启用方法 docker run -it --userns-remapdefault my-app sh
id # 显示uid0(root)但宿主机实际为非root用户 5 Namespace的局限性 内核共享所有容器共用宿主机内核无法运行不同内核版本的应用性能开销Namespace和Cgroups会引入少量性能损耗特权容器风险--privileged模式会绕过部分隔离 6 总结 Namespace是Docker资源隔离的核心技术涵盖PID、网络、文件系统等 附录常用命令速查 # 查看系统支持的Namespace
ls /proc/$$/ns/# 进入容器的Namespace
nsenter --target pid --mount --net --pid# 查看所有Namespace
lsns -p pid