我最近开始学习docker,似乎大部分繁重的工作都是由linux内核完成的,使用名称空间和cgroups。
我发现令人困惑的一些事情是:
命名空间和cgroup有什么区别?他们解决的不同用例有哪些?
Docker实现了什么以获得普及?
我想知道这些功能的内部结构及其实现方式。
答案 0 :(得分:66)
这两个概念的正确链接已在PR 14307中修复:
引擎盖下,Docker基于以下组件构建:
Linux内核的 cgroups 和
namespaces
功能
使用:
简而言之:
点击Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic的“Jérôme Petazzoni”了解详情。
Cgroup涉及资源计量和限制:
命名空间为进程提供了自己的系统视图
多个名称空间:
答案 1 :(得分:2)
Cgroups(控制组)进行资源管理。
它确定要为容器分配多少主机计算机资源。
例如:- 我们在docker-compose yaml文件中定义资源以创建以下服务:
resources: limits: cpus: "0.1" (100 millicores) memory: 50M
在此示例中,我们明确要求cgroup将这些资源分配给特定的容器。
命名空间:提供进程隔离,容器的完全隔离,独立的文件系统。
答案 2 :(得分:1)
cgroups 限制进程或进程集可以使用这些资源的资源可能是 CPU,内存,网络I / O或对文件系统的访问,而命名空间限制了进程组对系统其余部分的可见性。
访问以获取更多详细信息How Linux Kernel Cgroups And Namespaces Made Modern Containers Possible