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

相关推荐
java_logo1 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
码农学院1 小时前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
大耳朵-小飞象10 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技11 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
生活爱好者!14 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
java_logo14 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
MC皮蛋侠客15 小时前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
尽兴-15 小时前
企业业务系统架构选型与渐进式演进
运维·系统架构·devops
Hui Baby15 小时前
K8S使用CRD和控制器简单应用
云原生·容器·kubernetes
通信小小昕16 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu