docker 可以根据需要在容器之间共享内存和 CPU 吗?

Can docker share memory and CPU between containers as needed?

如果我运行宁多个 docker 具有突发内存和 CPU 利用率的容器,它们是否能够使用主机的全部容量?或者它们会受限于各自容器定义的 CPU 和内存限制吗?

例如:

如果我运行每天在不相交的时间使用 3 个容器,这些容器每天一次突增至 1GB 内存。

同样,如果这些相同的容器 CPU 很重,并且在不相交的时间每天爆裂至 1CPU 个单位。

我可以 运行 将这 3 个容器分别放在一个只有 1.1GB 内存或 1.1 CPU 个单元的盒子上吗?

Docker 容器不是 VM, 它们 运行 在主机 OS 内核上方的笼子里,所以背后没有管理程序魔法。

容器内的进程 运行从内核的角度来看与主机进程没有太大区别。他们只是高度孤立。

内存和 cpu 调度将由 "host" 处理。您在 docker 设置中设置的是 CPU 份额,以便为某些容器提供优先级和界限。

所以是的,如果在处理峰值后正确释放已使用的内存,则具有休眠进程的容器不会消耗太多,否则,该内存将被换出,不会对性能产生太大影响。

实例化一个docker容器只会消耗内存资源。只要没有进程处于 运行ning 状态,您就会看到它的 cpu 使用率为零。

我建议查看 cgroups 文档,实际上是 cgroups v2 的文档,因为它们比 v1 文档结构更好。 cpu 和内存控制器见第 5 章:https://www.kernel.org/doc/Documentation/cgroup-v2.txt

当您不需要在容器启动时显式指定 --memory 和 --cpu-shares 选项时,容器将拥有所有可用的 cpu 共享和内存在实例上。如果没有其他进程正在消耗资源,则容器可以使用所有可用的 cpu 和内存。

理论上您应该能够 运行 实例上的 3 个容器。 确保没有容器占用内存或 cpu 资源。