linux上最简单的回答是Namespace和Cgroups。它们可以让程序在一个资源可控的独立(隔离)环境中运行,这就是容器(容器共享宿主机内核)
Namespace(保证资源的隔离)
- PID Namespace 负责隔离不同容器的进程,
- Network Namespace 又负责管理网络环境的隔离,
- Mount Namespace 管理文件系统的隔离
Cgroups (可以对指定的进程做各种计算机资源的限制,比如限制 CPU 的使用率,内存使用量,IO 设备的流量等等)
- CPU 子系统,用来限制一个控制组(一组进程,你可以理解为一个容器里所有的进程)可使用的最大 CPU。
- memory 子系统,用来限制一个控制组最大的内存使用量。
- pids 子系统,用来限制一个控制组里最多可以运行多少个进程。
- cpuset 子系统, 这个子系统来限制一个控制组里的进程可以在哪几个物理 CPU 上运行。