【问题标题】:How many CPUs does a docker container use?一个 docker 容器使用多少个 CPU?
【发布时间】:2016-10-18 16:47:42
【问题描述】:

假设我在一个 docker 容器内运行 multiprocessing 服务,该容器产生多个进程,docker 会使用主机的所有/多个内核/CPU 还是只使用一个?

【问题讨论】:

  • 允许使用与它所在的 cgroup 一样多的 CPU。默认情况下,不受限制。如果您想更改它,请参阅 --cpuset-cpus
  • (一个 docker 容器只是一堆私有命名空间——因为它不模拟 CPU,它需要不遗余力地对它们施加任何限制;Linux 内核提供了允许这种不合时宜的方式,但这仍然是需要明确执行的)。
  • Windows 上使用 VirtualBox 的 Docker Toolbox 怎么样?

标签: docker


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多