Docker-为什么需要Namespace
1:什么是Namespace
- Namespace是linux内核的一种功能,改功能对内核资源进行划分,Namespace的工作方式是通过一组资源和进程设置相同的Namespce而起作用。该功能可以实现在同一主机系统中,对进程ID,主机名,用户ID,文件名,网络和进程间通信等资源隔离,,Docker利用Namespace实现每个容器的资源隔离,从而保证每个容器只能访问自己的Namespace资源
2:Mount Namespace
- Mount Namespace是Linux内核实现的第一个Namespace,它可以用来隔离不同进程或进程组看到的挂载点,通俗的讲,就是可以实现不同的进程看到不同的挂载目录
3:PID Namespace
- PID Namespace是用来隔离进程,在不同的PID Namespace中,进程可以拥有相同的PID号,利用PID Namespace可以实现每个容器的主进程为1号进程,而容器内的进程在主机上却拥有不同的PID,例如一个进程在主机上PID为122,使用PID Namespace可以实现在容器中的PID为1
4:UTS Namespace
- UTSNamespace主要是用来隔离主机名的,它允许每个UTS Namespace拥有一个独立的主机名
5:IPC Namespace
- IPC Namespace主要是用来隔离进程间通信的
6:User Namespace
- User Namespace主要是用来隔离用户和用户组的。一个典型的场景就是在主机上以非Root用户运行的进程可以在一个单独的User namespace中映射成root用户。使用User Namespace可以实现进程在容器中拥有Root权限,而在主机上确实普通用户
7:Net Namespace
- Net namespace是用来隔离网络设备,IP地址和端口等信息的,Net Namespace可以使容器拥有自己独立的ip地址,端口和网卡信息。
8:Docker为什么需要Namespace
- 当Docker新建一个容器时,它会创建这六种NameSpace,然后将容器中的进程假如到这些Namespace中,使得Docker容器中的进程只能看到当前Namespace的资源,正式由于Docker使用了Linux的这些Namespace技术,才实现了Docker容器的隔离,可以说没有Namespace就没有Docker容器