cgroup 和命名空间之间的区别
difference between cgroups and namespaces
我最近开始学习 docker,似乎大部分繁重的工作都是由 Linux 内核使用名称空间和 cgroup 完成的。
让我感到困惑的几件事是:
命名空间和cgroup有什么区别?他们解决了哪些不同的用例?
docker 在这些基础上实施了什么来获得人气?
我想知道这些功能的内部结构以及它们是如何实现的。
这两个概念的正确链接已在 PR 14307 中修复:
Under the hood, Docker is built on the following components:
The cgroups and namespaces
capabilities of the Linux kernel
有:
- cgroup:控制组为 aggregating/partitioning 任务集及其所有未来子任务提供了一种机制,将其分为具有专门行为的分层组。
- namespace: 将全局系统资源包装在一个抽象中,使名称空间内的进程看起来它们拥有自己的全局资源的独立实例。
简而言之:
- Cgroups = 限制您可以使用的数量;
- 命名空间 = 限制您可以看到(并因此使用)的内容
查看更多信息“Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic" by Jérôme Petazzoni。
Cgroup 涉及资源计量和限制:
- 内存
- CPU
- 块I/O
- 网络
命名空间为进程提供了它们自己的系统视图
多个命名空间:
- pid
- 网
- mnt
- uts
- IPC
- 用户:userns是graduating from experimental in docker 1.10
(per-daemon-instance 正在将容器根目录重新映射到非特权用户:PR 12648: see its design)
cgroups 限制一个进程或一组进程可以使用的资源,这些资源可能是 CPU、内存、网络 I/O 或访问文件系统,而命名空间限制进程组对系统其余部分的可见性。
访问了解更多详情How Linux Kernel Cgroups And Namespaces Made Modern Containers Possible
Cgroups(control groups)做资源管理。
它决定了给容器多少宿主机资源。
例如:-
我们在 docker-compose yaml 文件中定义资源以创建服务,例如:
resources:
limits:
cpus: "0.1" (100 millicores)
memory: 50M
在此示例中,我们明确要求 cgroups 将这些资源分配给特定容器。
Namespaces:提供进程隔离,容器完全隔离,独立文件系统。
命名空间有 6 种类型:
1. mount ns - 用于文件系统。
2. UTS(Unique time sharing) ns- 检查 运行 个容器
的不同主机名
3. IPC ns - 进程间通信
4. Network ns- 负责给不同的容器分配不同的ip
5. PID ns——进程id隔离
6.用户ns-不同的用户名(uid)
我最近开始学习 docker,似乎大部分繁重的工作都是由 Linux 内核使用名称空间和 cgroup 完成的。
让我感到困惑的几件事是:
命名空间和cgroup有什么区别?他们解决了哪些不同的用例?
docker 在这些基础上实施了什么来获得人气?
我想知道这些功能的内部结构以及它们是如何实现的。
这两个概念的正确链接已在 PR 14307 中修复:
Under the hood, Docker is built on the following components:
The cgroups and
namespaces
capabilities of the Linux kernel
有:
- cgroup:控制组为 aggregating/partitioning 任务集及其所有未来子任务提供了一种机制,将其分为具有专门行为的分层组。
- namespace: 将全局系统资源包装在一个抽象中,使名称空间内的进程看起来它们拥有自己的全局资源的独立实例。
简而言之:
- Cgroups = 限制您可以使用的数量;
- 命名空间 = 限制您可以看到(并因此使用)的内容
查看更多信息“Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic" by Jérôme Petazzoni。
Cgroup 涉及资源计量和限制:
- 内存
- CPU
- 块I/O
- 网络
命名空间为进程提供了它们自己的系统视图
多个命名空间:
- pid
- 网
- mnt
- uts
- IPC
- 用户:userns是graduating from experimental in docker 1.10
(per-daemon-instance 正在将容器根目录重新映射到非特权用户:PR 12648: see its design)
cgroups 限制一个进程或一组进程可以使用的资源,这些资源可能是 CPU、内存、网络 I/O 或访问文件系统,而命名空间限制进程组对系统其余部分的可见性。
访问了解更多详情How Linux Kernel Cgroups And Namespaces Made Modern Containers Possible
Cgroups(control groups)做资源管理。
它决定了给容器多少宿主机资源。
例如:- 我们在 docker-compose yaml 文件中定义资源以创建服务,例如:
resources: limits: cpus: "0.1" (100 millicores) memory: 50M
在此示例中,我们明确要求 cgroups 将这些资源分配给特定容器。
Namespaces:提供进程隔离,容器完全隔离,独立文件系统。
命名空间有 6 种类型:
1. mount ns - 用于文件系统。
2. UTS(Unique time sharing) ns- 检查 运行 个容器
的不同主机名 3. IPC ns - 进程间通信
4. Network ns- 负责给不同的容器分配不同的ip
5. PID ns——进程id隔离
6.用户ns-不同的用户名(uid)