docker与宿主机共享内核吗

docker与宿主机是共享内核的;Docker容器本质上是宿主机上的进程,Docker通过namespace实现了资源隔离,docker和宿主机共享内核本质上是通过内核的namespace和cgroup来实现的进程隔离。

docker与宿主机共享内核吗插图

本教程操作环境:linux7.3系统、docker-1.13.1版、Dell G3电脑。

docker与宿主机共享内核吗

docker与宿主机是共享内核的

其本质是通过内核的namespace合cgroup来实现的进程隔离

当谈论Docker时,常常会聊到Docker的实现方式。很多开发者都知道,Docker容器本质上是宿主机上的进程。Docker通过namespace实现了资源隔离。通过cgroups实现了资源限制,通过写时复制机制实现了高效的文件操作。但更进一步深入namespace和cgroups等技术细节时,大部分开发者都会感到茫然无措。所以在这里,先带领大家走进Linux内核,了解namespace和cgroups的技术细节。

namespace资源隔离

想要要实现一个资源隔离的容器,应该从哪些方面入手呢?可能有人第一反应可能就是chroot命令,这条命令给用户最直观的感觉就是使用后根目录/的挂载点切换了,即文件系统被隔离了。接着,为了在分布式的环境下进行通信和定位,容器必然需要一个独立的IP、端口、路由等,自然就想到了网络的隔离。同时,容器还需要一个独立的主机名以便在网络中标识自己。想到网络,顺其自然就想到通信,也就想到了进程间通信需要隔离。开发者可能也想到了权限的问题,对用户和用户组的隔离就实现了用户权限的隔离。最后,运行在容器中的应用需要有自己的(PID),自然也需要与宿主机中的PID进行隔离。

由此,基本上完成了一个容器所需要做的六项隔离,Linux内核中就提供了这六种namespace隔离的系统调用,如表1-1所示。

docker与宿主机共享内核吗插图1

实际上,Linux内核实现namespace的一个主要目的,就是为了实现轻量级虚拟化(容器)服务。在同一个namespace下的进程可以感知彼此的变化,而对外界的进程一无所知。这样就可以让容器中的进程产生错觉,仿佛自己置身于一个独立的系统环境中,以此达到独立和隔离的目的。

版权声明:本文采用知识共享 署名4.0国际许可协议BY-NC-SA 进行授权
文章作者:jiuhucn
文章链接:https://www.jiuhucn.com/2022/03/24/1947.html
免责声明:本站为资源分享站,所有资源信息均来自网络,您必须在下载后的24个小时之内从您的电脑中彻底删除上述内容;版权争议与本站无关,所有资源仅供学习参考研究目的,如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
本站为非盈利性站点,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>