Docker原理之一的Namespace详解

一,什么是Namespace?

维基定义:Namespace 是 Linux 内核的一项功能,该功能对内核资源进行分区,以使一组进程看到一组资源,而另一组进程看到另一组资源。Namespace 的工作方式通过为一组资源和进程设置相同的 Namespace 而起作用,但是这些 Namespace 引用了不同的资源。资源可能存在于多个 Namespace 中。这些资源可以是进程 ID、主机名、用户 ID、文件名、与网络访问相关的名称和进程间通信。

简单来说就是,它为进程提供了一个隔离的视角。在一个命名空间内进行的资源操作,对其他命名空间通常是不可见的,从而实现了进程间的隔离。

二,Namespace的创建

Namespaces 是通过以下几个系统调用在 Linux 中实现的:

1,clone():

这个系统调用用于创建一个新的进程。通过传入特定的 CLONE_NEW* 标志(例如 CLONE_NEWPID),可以在创建子进程时,为子进程创建一个或多个新的命名空间,并将该子进程放入其中。

2,unshare():

用于将当前进程 从现有的命名空间中分离 出来,放入一个新的命名空间。例如,一个正在运行的进程可以调用 unshare(CLONE_NEWNET) 为自己创建一个新的、隔离的网络环境。

3,setns():

用于将当前进程 加入到一个已存在的 命名空间中。这通常通过打开目标命名空间对应的 /proc/[pid]/ns/[type] 文件描述符来实现。

三,各种Namespace的解释

Linux内核主要提供了以上八种Namespace,但是docker目前使用的只有前面六种Namespace。

①Mount namespace(mnt)

隔离不同的进程或者进程组看到的挂载点,实现容器内只能看到自己的挂载信息,在容器内的挂载操作不会影响主机的操作目录。

②PID namespace(pid)

其主要的作用是隔离进程,例如一个进程在主机上PID为1234,使用PID namespace的话可以实现该进程在容器内部看到的PID为1。

③UTS namespace(uts)

它允许每一个uts namespace下都拥有一个独立的主机名

④IPC namespace(IPC)

PID Namespace 和IPC Namespace 一起使用可以实现同一IPC Namespace 内的进程彼此可以通信,但不同IPC Namespace 的进程却不能通信。

其主要实现的效果是隔离进程之间的通信。能够防止容器内的进程通过共享内存、信号量等方式干扰其他容器或宿主机进程。

⑤User namespace(User)

使用User namespace可以实现进程在容器内部拥有root权限,但是在主机上时却还是普通用户。

⑥Net namespace(Net)

Net namespace可以让每一个进程有自己独立的IP地址,端口和网卡信息。

四,总结

Docker容器基于以上六种namespace,实现了一个容器与外界的进程ID,用户ID,主机名,文件名,网络和进程间通信等资源的隔离。

相关推荐
测试修炼手册39 分钟前
[测试工具] 用 Codex 做测试实战:从需求分析到自动化用例落地
运维·自动化·需求分析
米高梅狮子1 小时前
03.网络类服务实践
linux·运维·服务器·网络·kubernetes·centos·openstack
IpdataCloud2 小时前
稳定的企业级IP数据接口怎么选?可用性指标+离线库高可用方案
运维·网络·tcp/ip
WebGIS开发2 小时前
地信职业百科②:GIS运维
运维·gis·就业·转行
淘矿人2 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
JiaWen技术圈2 小时前
nginx 安全响应头 介绍
运维·nginx·安全
IMPYLH2 小时前
Linux 的 unexpand 命令
linux·运维·服务器·bash
万里侯3 小时前
GitOps实战:用Git管理基础设施
微服务·容器·k8s
|_⊙3 小时前
Linux 文件知识 补充
linux·运维·服务器
十六年开源服务商5 小时前
2026服务器配置优化与WordPress运维实战指南
android·运维·服务器