cgroup和名称空间之间的区别

2016-01-16 linux docker cgroups

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

我感到困惑的一些事情是:

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

  2. 在这些基础之上,docker在其上实现了什么?

  3. 我想知道这些功能的内部以及如何实现。

Answers

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

在后台,Docker基于以下组件构建:

Linux内核的cgroupsnamespaces功能

带有:

  • cgroup :控制组提供了一种机制,可以将任务集及其所有将来的子级集合/划分为具有特殊行为的分层组。
  • namespace :以一种抽象方式包装全局系统资源,使它在命名空间中的进程中看起来像它们具有自己的隔离的全局资源实例。

简而言之:

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

请参阅JérômePetazzoni的容器剖析:命名空间,cgroup和某些文件系统魔术 ”中的更多内容

Cgroup涉及资源计量和限制:

  • 记忆
  • 中央处理器
  • 块I / O
  • 网络

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

多个名称空间:

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

访问以获取更多详细信息Linux内核Cgroup和命名空间如何使现代容器成为可能

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

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

资源: 
限制: 
 cpus:“ 0.1”(100毫米) 
记忆体:50M 

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


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


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

Related