栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker实现进程隔离的方式

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker实现进程隔离的方式

前言

Docker其实并没有实现什么新的技术,而是在Linux的系统调用之上做了封装,达到了非常好的用户体验,让人们感觉好像是跑的一个虚拟机一样。


Docker通过Linux的namespace机制实现进程隔离

对比虚拟机技术在同一个宿主机上建立多个操作系统实现的彻底的进程隔离,这样的实现方式要跑多个操作系统,带来了非常大的资源开销。而Docker容器技术则是通过一系列的namespace实现进程隔离,这是一种内核级别隔离系统资源的方法。

namespace隔离类型:

UTS namespace
UTS(UNIX Time-sharing System)namespace提供了主机名与域名的隔离,这样每个docker容器就可以拥有独立的主机名和域名了,在网络上可以被视为一个独立的节点,而非宿主机上的一个进程。IPC namespace
进程间通信(Inter-Process Communication, IPC)涉及的IPC资源包括常见的信号量、消息队列和共享内存。在同一个IPC namespace 下的进程彼此可见,不同IPC namespace下的进程则互相不可见。PID namespace
PID namespace隔离非常实用,它对进程PID重新标号,即两个不同namespace 下的进程可以有相同的PID。每个PID namespace都有自己的计数程序。内核为所有的PID namespace维护了一个树状结构,最顶层的是系统初始时创建的,被称为root namespace,它创建的新PID namespace被称为child namespace(树的子节点)。通过这种方式,不同的PID namespace会形成一个层级体系。所属的父节点可以看到子节点中的进程,并可以通过信号等方式对子节点中的进程产生影响。反过来,子节点却不能看到父节点PID namespace中的任何内容。

Linux的namespace详细参见:浅谈Linux Namespace机制


效果演示

Docker是通过clone()接口在创建新进程的同时创建namespace。

int clone(int (*child_func)(void *), void *child_stack, int flags, void *arg);

我们在宿主机上使用ps aux查询该操作系统中所有的进程,可以发现有这么多

创建一个容器并进入到容器内部,同样执行ps aux,发现就两个

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/729032.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号