我最近开始学习docker,似乎大部分繁重的工作都是由Linux内核使用名称空间和cgroups完成的。
我感到困惑的一些事情是:
命名空间和cgroup有什么区别?他们解决的用例是什么?
在这些基础之上,docker在其上实现了什么?
我想知道这些功能的内部以及如何实现。
Answers:
这两个概念的正确链接已在PR 14307中修复:
在底层,Docker基于以下组件构建:
Linux内核的cgroup和
namespaces
功能
带有:
简而言之:
请参阅JérômePetazzoni的“容器剖析:命名空间,cgroup和某些文件系统魔术”中的更多内容。
Cgroup涉及资源计量和限制:
命名空间为进程提供了他们自己的系统视图
多个名称空间:
chroot
基于某个名称空间吗?可以chroot
用某些命名空间代替吗?
chroot
用某些命名空间代替吗?
cgroups限制一个或一组进程可以使用的资源,这些资源可以是CPU,内存,网络I / O或对文件系统的访问,而名称空间则限制了该组进程对系统其余部分的可见性。
访问以获取更多详细信息Linux内核Cgroup和命名空间如何使现代容器成为可能
Cgroups(控制组)进行资源管理。
它确定要为容器分配多少主机资源。
例如:-我们在docker-compose yaml文件中定义资源以创建服务,例如:
资源: 限制: cpus:“ 0.1”(100毫米) 记忆体:50M
在此示例中,我们明确要求cgroup将这些资源分配给特定的容器。
命名空间:提供进程隔离,容器的完全隔离,独立的文件系统。