在 Linux 中,Docker 容器的内存和 CPU 分配是通过 Linux 内核提供的 cgroups (Control Groups) 技术实现的。cgroups 可以将一组进程绑定到一个或多个 cgroup 控制组中,对绑定进程的资源使用进行限制和控制。
在 Docker 中,通过使用 cgroups 来限制每个容器可以使用的内存和 CPU。当创建一个新容器时,Docker 会自动创建一个 cgroup 控制组,并将该容器的进程加入到该控制组中。然后,可以通过 Docker 命令或配置文件来指定每个容器分配的 CPU 和内存资源。
具体来说,可以通过以下命令来设置容器的 CPU 和内存限制:
--cpu-shares :用于设置 CPU 分配比例,默认值为 1024,表示容器可以使用所有可用 CPU 的一半。如果将值设置为 512,则表示容器只能使用所有可用 CPU 的四分之一。
--memory :用于设置容器的内存限制。可以指定的值包括带单位的值,例如 512m 表示限制为 512 MB 内存,也可以指定为无单位的整数值,表示限制为该数值的字节数。
除了 CPU 和内存资源,还可以通过 cgroups 控制组来限制其他资源,例如磁盘 I/O、网络带宽等。
总之,Docker 通过使用 Linux 内核提供的 cgroups 技术来限制容器的资源使用,确保容器之间的资源隔离和安全性。