[Docker]容器服务是如何与cgroups协同进行资源控制的?
Docker 利用 Linux 的控制组(cgroups)来进行资源控制。cgroups 是一种内核特性,它允许对资源(例如 CPU、内存、磁盘 I/O 等)进行限制、分配和优先级分配。
Docker 利用 cgroups 进行资源限制时,他会通过 cgroups 为每个容器分配特定的资源配额。这意味着每个容器只能够使用 cgroups 中指定的 CPU 时间、内存空间、网络带宽等资源。如果容器超过了配额,那么 cgroups 将会暂时停止该容器运行,从而确保它不会消耗超过配额的资源。
以下是一些 Docker 利用 cgroups 进行资源控制的典型方式:
- CPU 配额限制:使用 cgroups 中的 cpu.shares 参数来限制容器可以使用的 CPU 时间。
- 内存配额限制:使用 cgroups 中的 memory.limit_in_bytes 参数来限制容器可以使用的内存量。
- 磁盘 I/O 配额限制:使用 cgroups 中的 blkio.weight 和 blkio.throttle.
.bps 参数来限制容器可以使用的磁盘 I/O 速率。
Docker 中的资源控制器将对应的 cgroups 参数与容器关联。例如,在使用 docker run
命令创建容器时,可以使用 --memory
选项设置内存限制,并使用 --cpu-shares
选项设置 CPU 配额。然后,Docker 将在内部实际创建一个 Cgroup 映射到这些参数,并监控用户在容器中使用的资源和行为,并执行相应的操作。
总结:Docker 利用 cgroups 实现了对 CPU、内存、磁盘 I/O、网络带宽等资源的限制和控制,确保容器使用足够但不超过配额的资源,将资源协同管理、分配和优先级分配。
本文作者:SkyBiuBiu
本文链接:https://www.cnblogs.com/Skybiubiu/p/17318848.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步