docker容器使用多少个CPU?


120

可以说我正在docker容器内运行一个多处理服务,生成多个进程,docker会使用主机的全部/多个内核/ CPU还是仅使用一个?


11
允许使用与其所在的cgroup一样多的CPU。默认情况下不受限制。看看--cpuset-cpus是否要更改它。
Charles Duffy

3
(Docker容器只是一堆私有名称空间-由于它不是在模拟CPU,因此需要竭尽全力对它们施加任何限制; Linux内核提供了允许此类淘汰的工具。一条路,但这实际上仍然需要明确执行)。
Charles Duffy

使用VirtualBox的Windows上的Docker Toolbox怎么样?
Egor Kraev

Answers:


110

正如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(包括Mac的Docker,Windows的Docker和docker-machine)中运行Docker,则这些VM的CPU限制将与笔记本电脑本身分开。Docker在该VM内运行,并将使用分配给VM本身的所有资源。例如,对于Mac的Docker,您具有以下菜单:

Docker for Mac高级设置


如果两个Docker容器都在生成过程中运行,它们是否会在具有2个CPU的同一VM上运行,从而影响性能?因此,当VM上只有2个CPU时,它们都产生两个进程,总共四个进程?
cocoPuffs

@cocoPuffs除非您指定CPU限制,否则与在同一主机上的容器外部运行这些进程一样。为每个容器添加CPU限制可以防止一个容器中的进程自己使用所有CPU资源。
BMitch

7

默认情况下,您的主机VM可能只有一个核心。因此,您应该首先增加VM cpu计数,然后使用--cpuset-cpus选项增加docker核心。您可以使用以下命令删除docker default VM,然后创建另一个具有可选cpu计数内存大小的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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.