先说结论:Docker容器的本质是一个特殊的进程。
学过操作系统的大家应该知道进程其实是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。
比如我们电脑上运行的微信程序是一个进程,运行的开发工具(intellj idea)也是一个进程。其实在操作系统视角来看,处于运行时的Docker容器本身也是一个进程,只是这个进程比较特殊,下面我们就来说说他特殊在哪里
针对Linux容器来说,为了实现容器间资源隔离与限制,其对容器进程做了下面的处理
第一:其使用Linux提供的NameSpace技术来修改Docker容器进行时视图,实现每个容器有相互隔离的网络命名空间、进程空间等;比如你在Docker容器内查看进程列表,会发现容器自身是1号进程,其并看不到操作系统视角的其他进程,比如每个docker容器看到的都是各自独立的文件系统,相互之间不会影响。
第二:使用Linux提供的NameSpace技术仅仅解决了容器之间的隔离问题,但是还是没法控制每个容器对资源使用的限制问题,比如还是无法控制每个容器可以使用多少cpu和内存等资源。所以还需要使用Linux的Cgroup技术来实现容器对资源使用的限制。Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。
总结:针对Linux内核的容器,比如Docker容器来说,其本质是一个特殊的进程。相比其他进程其特殊在基于NameSpace技术实现了进程的视图的隔离,基于Cgroup技术实现了资源使用的限制,从而实现了容器之间的资源隔离与限制。