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,主机名,文件名,网络和进程间通信等资源的隔离。

相关推荐
翼龙云_cloud1 小时前
亚马逊云渠道商:如何利用AWS工具进行日常安全运维?
运维·安全·云计算·aws
qinyia1 小时前
WisdomSSH如何高效检查服务器状态并生成运维报告
linux·运维·服务器·数据库·人工智能·后端·ssh
w***48829 小时前
Linux安装redis
linux·运维·redis
稚辉君.MCA_P8_Java9 小时前
Gemini永久会员 containerd部署java项目 kubernetes集群
后端·spring cloud·云原生·容器·kubernetes
wanhengidc10 小时前
深度了解云手机是什么
运维·服务器·科技·智能手机·云计算
python百炼成钢10 小时前
28.嵌入式 Linux LED 驱动开发实验
linux·运维·驱动开发
BullSmall14 小时前
Test Matrix:测试矩阵(IT 领域定义 + 设计实践 + 华为场景应用)
运维·服务器
liuyao_xianhui14 小时前
版本控制器git--gdb/cgdb
linux·运维·服务器·git
CS_浮鱼14 小时前
【Linux进阶】mmap实战:文件映射、进程通信与LRU缓存
linux·运维·c++·缓存