1.Linux Namespace
namespace是Linux系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在核内,各个docker容器运行在同一个docker主进程并且共 用同一个宿主机系统内核,各docker容器运行在宿主机的用户空间,每个容器都要有类似于虚拟机一样的相互隔离的运行空间,但是容器技术是在一个 进程内实现运行指定服务的运行环境,并且还可以保护宿主机内核不受其他进程的干扰和影响,如文件系统空间、网络空间、进程空间等,目前主要通过 以下8种技术实现容器运行空间的相互隔离.
目前,Linux已经支持8种全局资源的虚拟化(每种资源都是随着Linux内核版本的迭代而逐渐加入的,因此有些内核版本可能不具备某种namespace):
-
cgroup namespace:该namespace可单独管理自己的cgroup
-
ipc namespace:该namespace有自己的IPC,比如共享内存、信号量等
-
network namespace:该namespace有自己的网络资源,包括网络协议栈、网络设备、路由表、防火墙、端口等
-
mount namespace:该namespace有自己的挂载信息,即拥有独立的目录层次
-
pid namespace:该namespace有自己的进程号,使得namespace中的进程PID单独编号,比如可以PID=1
-
time namespace:该namespace有自己的启动时间点信息和单调时间,比如可设置某个namespace的开机时间点为1年前启动,再比如不同的namespace创建后可能流逝的时间不一样
-
user namespace:该namespace有自己的用户权限管理机制(比如独立的UID/GID),使得namespace更安全
-
uts namespace:该namepsace有自己的主机信息,包括主机名(hostname)、NIS domain name