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

有几件事让我感到困惑:

  1. 命名空间和cgroup之间有什么区别?它们处理的不同用例是什么?

  2. docker在这上面实现了什么以获得人气?

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

推荐答案

这两个概念的正确联系已在PR 14307中确定:

在引擎盖下,Docker由以下组件构成:

Linux内核的100namespaces功能

与:

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

简而言之:

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

更多信息请参见Jérôme Petazzoni页的"Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic".

cGroup涉及资源计量和限制:

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

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

多个名称空间:

Linux相关问答推荐

使用sed替换字符,但如果它是在bash csv文件中的字符串中,则不使用

在shell 中使用排除模式的grep

Docker运行错误:exec/app/backend/server:没有这样的文件或目录

AWK 命令根据另一列中相同的值获取列中的不同值

BASH:在curl输出的每一行添加前缀

在具有不同文件类型的文件夹中编辑多个 xml 文件 - 使用预定顺序

将行转换为一条

使用 awk 将多行文本转换为 CSV

另一个远程的 Git 合并分支

BASEDIR 环境变量未正确定义

Java 8 上的 SQL Server JDBC 错误:驱动程序无法使用安全套接字层 (SSL) 加密建立与 SQL Server 的安全连接

永久反转补丁文件

按主机名的 IPv6 地址

哪个程序在给定任何文件的情况下创建一个 C 数组?

在亚马逊 ec2 linux 微型实例上的 virtualenv 中安装 scipy 时遇到问题

如何知道是否有足够的内存可以在 Linux 机器上部署新应用程序?

在 Emacs 中匹配括号的命令是什么?

Python日志(log)记录 - 判断日志(log)文件的位置?

在 reverse-i-search (Ctrl+R ) , 历史上类似命令之间切换的任何方法

crontab 在特定小时之间每 15 分钟运行一次