namespace是什么?
简单的来说,namespace是对内核内的全局资源的封装,使得每一个namespace中都有一份独立的资源,因此不同进程在各自的namespace中对同一份资源进行操作互不影响。
举个例子:sethostname系统调用,会改变主机名,而这个主机名就是一个内核全局资源,linux内核通过实现UTS namespace,将不同的进程分割在不同namespace中,某个进程在namespace A中调用了sethostname,则namespaceA中的主机名变化了,但是其他namespace中的主机名没有变化。
Linux内核实现了6种namespace:
IPC:隔离system V IPC和POSIX消息队列
Network:隔离网络资源
Mount:隔离文件系统挂载点
PID:隔离进程PID
UTS:隔离主机名和域名
User:隔离用户ID和组ID