cgroups和命名空间之间的区别

Ins*_*ler 61 linux docker

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

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

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

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

  3. 我想知道这些功能的内部结构以及它们是如何实现的.

Von*_*onC 82

PR 14307修正了这两个概念的正确链接:

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

Linux内核的cgroupnamespaces功能

附:

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

简而言之:

  • Cgroups =限制你可以使用多少;
  • namespaces =限制你可以看到的东西(因此使用)

请参阅JérômePetazzoni撰写的 " 容器剖析:命名空间,cgroups和一些文件系统魔法 " .

Cgroup涉及资源计量和限制:

  • 记忆
  • 中央处理器
  • 阻止I/O.
  • 网络

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

多个名称空间:

  • https://twitter.com/b0rk/status/1225445956734390273 容器插图 (2认同)

cap*_*ala 9

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

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


小智 6

Cgroups(控制组)进行资源管理。
它决定了要为容器提供多少主机资源。

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

资源:
  限制:
    CPU:“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)