cgroup和名称空间之间的区别


83

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

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

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

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

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


Answers:


104

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

在底层,Docker基于以下组件构建:

Linux内核的cgroupnamespaces功能

带有:

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

简而言之:

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

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

Cgroup涉及资源计量和限制:

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

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

多个名称空间:


谢谢。是chroot基于某个名称空间吗?可以chroot用某些命名空间代替吗?
蒂姆(Tim)

1
不,chroot不是基于命名空间的:请参阅itnext.io/…。但是,三年多以后,请记住,新的Docker(19.03,仍处于beta版)可以无根运行:github.com/moby/moby/blob/…。并且可以在主机名称空间上公开资源:github.com/moby/moby/pull/38913
VonC

可以chroot用某些命名空间代替吗?
蒂姆(Tim)

1
@Tim不是本机的。也许与pivot_root?(unix.stackexchange.com/a/456777/7490)另请参见github.com/vincentbernat/jchroot
VonC



2

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)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.