一个 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-countmemory 大小的 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?的主要内容,如果未能解决你的问题,请参考以下文章

docker安装

简单使用docker

查看docker占用多少CPU内存等资源

docker资源限制

限制容器对内存的使用 - 每天5分钟玩转 Docker 容器技术(27)

限制容器对内存的使用 - 每天5分钟玩转 Docker 容器技术(27)