一个 docker 容器使用多少个 CPU?
Posted
技术标签:
【中文标题】一个 docker 容器使用多少个 CPU?【英文标题】:How many CPUs does a docker container use? 【发布时间】:2016-10-18 16:47:42 【问题描述】:假设我在一个 docker 容器内运行 multiprocessing 服务,该容器产生多个进程,docker 会使用主机的所有/多个内核/CPU 还是只使用一个?
【问题讨论】:
允许使用与它所在的 cgroup 一样多的 CPU。默认情况下,不受限制。如果您想更改它,请参阅--cpuset-cpus
。
(一个 docker 容器只是一堆私有命名空间——因为它不模拟 CPU,它需要不遗余力地对它们施加任何限制;Linux 内核提供了允许这种不合时宜的方式,但这仍然是需要明确执行的)。
Windows 上使用 VirtualBox 的 Docker Toolbox 怎么样?
【参考方案1】:
正如 Charles 提到的,默认情况下所有都可以使用,或者您可以使用 --cpuset-cpus
参数限制每个容器。
docker run --cpuset-cpus="0-2" myapp:latest
这会将容器限制为 3 个 CPU(0、1 和 2)。有关详细信息,请参阅docker run docs。
限制容器 CPU 使用率的首选方法是对 CPU 进行部分限制:
docker run --cpus 2.5 myapp:latest
这会将您的容器限制为主机上的 2.5 个内核。
最后,如果您在虚拟机中运行 docker,包括适用于 Mac 的 Docker、适用于 Windows 的 Docker 和 docker-machine,这些虚拟机的 CPU 限制将与您的笔记本电脑本身不同。 Docker 在该 VM 内部运行,并将使用分配给 VM 本身的所有资源。例如。使用 Docker for Mac 你有以下菜单:
【讨论】:
如果两个 docker 容器都运行在具有 2 个 CPU 的同一 VM 上,它们是否都会影响性能?那么当虚拟机上只有 2 个 CPU 时,两者都会产生两个进程,总共四个? @cocoPuffs 除非您指定 CPU 限制,否则就像您在同一主机上的容器外运行这些进程一样。为每个容器添加 CPU 限制可以防止一个容器中的进程为自己使用所有 CPU 资源。 真的很全面,很棒的东西 你能在一个cpu上运行多个容器吗? @MuhammadUmer 是的,就像在一个 CPU 上运行多个进程一样。【参考方案2】:也许您的主机虚拟机默认只有一个内核。因此,您应该首先增加您的 VM cpu-count,然后使用 --cpuset-cpus 选项来增加您的 docker 内核。您可以使用以下命令删除 docker 默认 VM,然后您可以创建另一个具有可选 cpu-count 和 memory 大小的 VM。:
docker-machine rm default
docker-machine create -d virtualbox --virtualbox-cpu-count=8 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default
在此步骤之后,您可以在运行映像之前指定内核数。此命令将使用总共 8 个内核中的 4 个内核。
docker run -it --cpuset-cpus="0-3" your_image_name
然后您可以使用以下命令检查映像中可用核心的数量:
nproc
【讨论】:
以上是关于一个 docker 容器使用多少个 CPU?的主要内容,如果未能解决你的问题,请参考以下文章