cgroups和命名空间之间的区别

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

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

  1. 命名空间和cgroup有什么区别? 他们提出什么不同的用例?

  2. docker工人在这上面实现了什么来获得知名度?

  3. 我想知道这些function的内部和如何实现。

这两个概念的适当联系在公元14307年已经确定:

在引擎盖下,Docker构建在以下组件之上:

Linux内核的cgroupsnamespaces功能

附:

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

简而言之:

  • Cgroups =限制你可以使用多少;
  • 命名空间 =限制你可以看到(因此使用)

请参阅JérômePetazzoni的 “ 容器解析 :名称空间,cgroups和一些文件系统魔术 ”。

Cgroups涉及资源计量和限制:

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

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

多个命名空间:

  • PID
  • MNT
  • UTS
  • IPC
  • 用户: userns它是从码头1.10实验毕业
    (每个守护进程实例将容器根重新映射到非特权用户正在进行: PR 12648 :查看其设计 )

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

请访问以获取更多详细信息Linux coreel Cgroups和命名空间如何制作现代容器