研究一下 容器 的 原理

这里 说 的 容器 是 操作系统 层 的 容器,   比如  ixc 、Docker     这种  。

容器,  有 自己 的 硬件资源,    可以 给 每个 容器 分配 指定 的 硬件资源 ,   容器 和 容器 之间 是 隔离 的 ,   隔离 是指 一个 容器 里 的 应用程序 不能 访问 到 另一个 容器 的 资源  , 容器 和 容器 之间 就像 一个个 独立 的 计算机 和 操作系统  。

对 使用者 来说,   容器 提供 的 接口 和 操作系统 一样,     所以 容器 也是 一个 虚拟操作系统  。

这就是 容器,   可以用 容器 实现 虚拟化,     或者说,   可以 把 容器 当 虚拟机 用  。

了解了 容器 的 功能,    那么,   要 怎么 实现 容器 呢  ?

我 提出 2 个 方案 :

方案一 ,  进程组

方案二 ,  进程

方案一 是 把 容器 当成 一个 进程组,   方案二 是 把  容器 当成 一个 进程  。

先来 看看 方案一,       上面说到 容器 有 自己 的 硬件资源,  这些 “硬件资源”  不是 直接 的 硬件资源,  而是 经过 操作系统 抽象 的,  比如  虚拟内存,  文件系统  。

虚拟内存 由 内存 和 外存 组成,     文件系统 对应 的 硬件 是 硬盘 、光盘 、U 盘,   文件系统 是 对 硬盘 、光盘 、U 盘 等  外部存储器  的 抽象  。

具体 的 ,   容器 的 资源 有 :

1   CPU,      按 占用率 算

2   虚拟内存,       按 存储空间 和 地址空间 算,   存储空间 表示 大小,  地址空间 表示 范围,     地址空间 用于 容器 间 的 隔离

3   文件系统,       每个 容器 有 一个 虚拟 的 文件系统,   比如 每个 容器  有 自己 的 C 盘 、D 盘 、E 盘   ……

4   虚拟 IP,          每个 容器 都有 一个 自己 的 IP,    甚至 可以 有 多个 IP,    这些 IP 都是 虚拟 IP,   是 从 操作系统 的 IP 协议 里 虚拟出来的,   而 操作系统 的 IP 协议 的 底层 是 物理网卡  。        如果 认为 一个 IP 对应 一个 网卡,   那么  也可以 认为 容器 有 一个 或 多个 虚拟网卡  。

设计 容器,   就是 要 设计 怎样  分配 和 隔离   CPU 、虚拟内存 、文件系统 、虚拟 IP   这 4 项 资源   。

在 方案一 里 ,   容器 是 一个 进程组,    这些 进程 都是 操作系统 里 的 普通 的 进程,    只要 让 这些 进程 的 CPU 占用率 总和 不超过  分配 的 大小 就可以  。

这 在 操作系统 的 进程调度 里 可以实现 。   就是 在 进程调度 的 时候,   考虑 给 哪个进程 分配时间片 的 时候,   计算 和 判断 一下 容器 里 的 进程 的 CPU 占用率 总和  就可以了  。

这 对 操作系统 的 进程调度 部分 的 代码 稍作修改 就可以  。      也就是 对 操作系统 的 内核代码 稍作修改 就可以  。

原文地址:https://www.cnblogs.com/KSongKing/p/14199603.html