假设我在一个生成多个进程的docker容器中运行multiprocessing服务,docker会使用主机的所有/多个内核/ CPU还是只有一个?
答案 0 :(得分:71)
正如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核心。
最后,如果您在VM内部运行docker,包括Docker for Mac,Docker for Windows和docker-machine,那些VM将具有与笔记本电脑本身分开的CPU限制。 Docker在该VM内部运行,并将使用提供给VM本身的所有资源。例如。使用Docker for Mac,您可以使用以下菜单:
答案 1 :(得分:1)
默认情况下,主机VM可能只有一个核心。因此,您应该先增加VM cpu计数,然后使用 -cpuset-cpus 选项来增加docker core。您可以使用以下命令删除docker default 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
在此步骤之后,您可以在运行映像之前指定核心数。此命令将使用4个内核,总共8个内核。
docker run -it --cpuset-cpus="0-3" your_image_name
然后您可以使用以下命令检查图像中可用核心的数量:
nproc