docker与宿主机是共享内核的;Docker容器本质上是宿主机上的进程,Docker通过namespace实现了资源隔离,docker和宿主机共享内核本质上是通过内核的namespace和cgroup来实现的进程隔离。
本教程操作环境:linux7.3系统、docker-1.13.1版、Dell G3电脑。
docker与宿主机是共享内核的
其本质是通过内核的namespace合cgroup来实现的进程隔离
当谈论Docker时,常常会聊到Docker的实现方式。很多开发者都知道,Docker容器本质上是宿主机上的进程。Docker通过namespace实现了资源隔离。通过cgroups实现了资源限制,通过写时复制机制实现了高效的文件操作。但更进一步深入namespace和cgroups等技术细节时,大部分开发者都会感到茫然无措。所以在这里,先带领大家走进Linux内核,了解namespace和cgroups的技术细节。
namespace资源隔离
想要要实现一个资源隔离的容器,应该从哪些方面入手呢?可能有人第一反应可能就是chroot命令,这条命令给用户最直观的感觉就是使用后根目录/的挂载点切换了,即文件系统被隔离了。接着,为了在分布式的环境下进行通信和定位,容器必然需要一个独立的IP、端口、路由等,自然就想到了网络的隔离。同时,容器还需要一个独立的主机名以便在网络中标识自己。想到网络,顺其自然就想到通信,也就想到了进程间通信需要隔离。开发者可能也想到了权限的问题,对用户和用户组的隔离就实现了用户权限的隔离。最后,运行在容器中的应用需要有自己的(PID),自然也需要与宿主机中的PID进行隔离。
由此,基本上完成了一个容器所需要做的六项隔离,Linux内核中就提供了这六种namespace隔离的系统调用,如表1-1所示。
实际上,Linux内核实现namespace的一个主要目的,就是为了实现轻量级虚拟化(容器)服务。在同一个namespace下的进程可以感知彼此的变化,而对外界的进程一无所知。这样就可以让容器中的进程产生错觉,仿佛自己置身于一个独立的系统环境中,以此达到独立和隔离的目的。
推荐学习:《docker视频教程》
以上是docker与宿主机共享内核吗的详细内容。更多信息请关注PHP中文网其他相关文章!