当前位置: 首页 > news >正文

【Docker基础】Docker核心概念:命名空间(Namespace)详解

目录

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)
  • 内核分配新Namespace:Linux内核为进程分配独立的资源视图
  • 容器进程运行在隔离环境:进程只能看到当前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-remap=default my-app sh
id  # 显示uid=0(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>

相关文章:

  • Vue中v-if条件渲染的常见陷阱:以金额显示为例
  • 工业协议转换新标杆:三格电子 Profinet IO-Link 主站网关赋能智能工厂
  • 【解决方案】Kali 2022.3修复仓库密钥无交互一键安装docker,docker compose
  • iOS Alamofire库的使用
  • Rethinking Coarse-to-Fine Approach in Single Image Deblurring论文阅读
  • 商业智能BI 企业提高数据质量,应该怎样保障数据治理有效性
  • 【AI News | 20250613】每日AI进展
  • 练习小项目11:鼠标跟随小圆点
  • PROFINET主站S7-1500通过协议网关集成欧姆龙NJ系列TCP/IP主站
  • 健康管理实训室协同育人模式的实践与探索
  • 使用 Higress AI 网关代理 vLLM 推理服务
  • 浏览器播放监控画面
  • 【图纸管理教程-3】编码统一,效率倍增!解决一物多码问题
  • 【知识图谱构建系列2】LLM4KGC项目安装运行
  • 无人机噪音处理模块技术分析
  • 全新NVIDIA Llama Nemotron Nano视觉语言模型在OCR基准测试中准确率夺冠
  • 机器翻译指标:BLEU
  • Linux内核网络协议注册与初始化:从proto_register到tcp_v4_init_sock的深度解析
  • 使用Stone 3D免编码快速创建带AI数字人的数字空间
  • TDesign Vue Starter `Vue2` 图片上传拿不到mock数据
  • 化妆网站源码/学seo需要多久
  • 做一款推荐类的网站/厉害的seo顾问
  • wordpress许愿插件/哈尔滨seo关键词排名
  • 类似百度的网站/事件营销
  • 网站建设和维护怎么学/竞价托管收费标准
  • 帝国cms获取网站地址/北京本地网络推广平台