cgroups和命名空间之间的区别

时间:2016-01-15 21:57:49

标签: linux docker

我最近开始学习docker,似乎大部分繁重的工作都是由linux内核完成的,使用名称空间和cgroups。

我发现令人困惑的一些事情是:

  1. 命名空间和cgroup有什么区别?他们解决的不同用例有哪些?

  2. Docker实现了什么以获得普及?

  3. 我想知道这些功能的内部结构及其实现方式。

3 个答案:

答案 0 :(得分:66)

这两个概念的正确链接已在PR 14307中修复:

  

引擎盖下,Docker基于以下组件构建:

     

Linux内核的 cgroups namespaces功能

使用:

  • cgroup :控制组提供了一种机制,用于将任务集及其所有未来子集聚合/分区为具有特殊行为的层次结构组。
  • 命名空间:将一个全局系统资源包装在一个抽象中,使得它在命名空间内的进程看来它们拥有自己独立的全局资源实例。

简而言之:

  • Cgroups =限制您可以使用的数量;
  • 名称空间 =限制您可以看到的内容(并因此使用)

点击Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic的“Jérôme Petazzoni”了解详情。

Cgroup涉及资源计量和限制:

  • 记忆
  • CPU
  • 阻止I / O
  • 网络

命名空间为进程提供了自己的系统视图

多个名称空间:

答案 1 :(得分:2)

Cgroups(控制组)进行资源管理。
它确定要为容器分配多少主机计算机资源。

例如:- 我们在docker-compose yaml文件中定义资源以创建以下服务:

resources:
  limits:
    cpus: "0.1" (100 millicores)
    memory: 50M

在此示例中,我们明确要求cgroup将这些资源分配给特定的容器。


命名空间:提供进程隔离,容器的完全隔离,独立的文件系统。


命名空间有6种类型:
1. mount ns-用于文件系统。
2. UTS(唯一时间共享)ns-检查正在运行的容器的不同主机名
3. IPC ns-进程间通信
4.网络ns-负责将不同的IP分配给不同的容器
5. PID ns-进程ID隔离
6.用户ns-不同的用户名(uid)

答案 2 :(得分:1)

cgroups 限制进程或进程集可以使用这些资源的资源可能是 CPU,内存,网络I / O或对文件系统的访问,而命名空间限制了进程组对系统其余部分的可见性。

访问以获取更多详细信息How Linux Kernel Cgroups And Namespaces Made Modern Containers Possible