docker容器中的网络原理(单机模式下的容器网络)(docker网络模式详解)
604
2022-05-29
大家都知道Docker容器的本质是宿主机上的进程,Docker通过namespace实现了资源隔离,通过cgroup实现了资源限制,通过写时复制机制实现了高效的文件操作,那么更进一步namespace是怎样隔离?很多人估计非常茫然。
在linux内核提供了6种namespace隔离的系统调用,它们基本完成了容器所需要做的隔离,如下表所示:
下面我们就以上几种隔离展开说明:
1、UTS(UNIX Time-sharing System)namespace提供了主机名与域名的隔离,这样每个Docker就可以拥有独立的主机名和域名了,在网络上可以视为一个独立的节点,而非宿主机上的一个进程。Docker中,每个镜像基本都是以自身所提供的服务名称来命名镜像的hostname,且不会对宿主机产生影响。
2、进程间通信(Inter-Process Communication,IPC)涉及的IPC资源包括常见的信号量、消息队列和共享内存。申请IPC资源就是申请了一个全局唯一的32位ID,所以IPC namespace中实际上包含了系统IPC标识符以及实现POSIX消息队列的文件系统。在同一个IPC namespace下进程彼此可见,不同IPC namespaceg下的进程则互相不可见。
3、PID namespace对进程PID进行了重新标号,即两个不同namespace下的进程可以拥有相同的PID。第个PID namespace都有自己的计数器。内核 为所有的PID namespace维护了一个树状结构,最顶层的系统初始时创建的,被称做root namespace.它创建的新的PID namespace被称做child namespace,而原先的PID namespace称为新创建节点的parnet namespace。通过这种方式,不同的PID namesapce会形成一个层级体系。所属的父节点可以看到子节点中的进程,并可以通过信号等方式对子节点的进程产生影响,,反过来,子节点看不到父节点PID namespac中的任何内容。
(待续)
任务调度 Docker
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。