1. namespace
1.1 namespace概述
实现容器化的前提在于提供一种资源隔离方案,作为虚拟化的前驱——虚拟机,在主机内部开辟一块较大的磁盘空间,并将虚拟系统所需的所有文件、二进制代码、依赖环境安装到本机,从而实现系统的虚拟化。但这种面向系统的虚拟化方式,开销大,资源利用率低。
相比虚拟机的重量级隔离方式,也存在一款轻量级方案,namespace是一种Linux kernel提供的面向进程的资源隔离方案,系统可以为进程分配不同的names互不干扰,从而实现轻量级容器化。
pid namespace:进程隔离,每个namespace的pid相互隔离。
net namespace: 网络隔离,即独立的网络标识,docker使用veth将container中的虚拟网卡同host相连。
ipc namespace:进程间交互隔离,Linux中常见的交互方式:信号量、消息队列和共享内存。
mnt namespace:允许文件目录隔离
uts namespace:允许每个container拥有独立的hostname和domain name
user namespace:允许每个container拥有不同的user和group id