基于Docker基于LXC的事实,我的理解是Docker容器从其主机操作系统共享各种资源。我担心的是CPU内核。这是一个场景:
a)因此,如果我在该主机上运行所有docker容器,它们是否会根据需要使用CPU /内核,就像它们是作为主机操作系统上的正常安装的应用程序一样运行?
b)docker容器是否会使用自己的进程,并且其中包含的所有处理都将粘贴到该父进程的CPU核心?
c)如何指定docker容器以使用多个核心(例如4个)。我看到有一个-C标志可以指向核心ID,但似乎没有选项指定容器随机选择N个核心。
答案 0 :(得分:7)
目前,我认为docker不提供这种级别的粒度。它没有指定它在lxc.conf文件中分配的内核数量,因此您可能会获得每个docker的所有内核(可能是1,我不是100%肯定)。
但是,您可以调整为给定容器生成的conf文件,并设置类似
的内容cpuset {
cpuset.cpus="0-3";
}
答案 1 :(得分:6)
最新(少数)版本可能会发生变化。现在,您可以使用docker run
的参数约束docker容器:
新docker版本中当前答案的等价物是
docker run ubuntu /bin/echo 'Hello world --cpuset-cpus="0-3"
但是,这会将docker进程限制为这些CPU,但是(如果我错了请纠正我)其他容器也可以请求相同的集合。
一种可能更好的方法是使用CPU份额。
答案 2 :(得分:4)
来自ORACLE文档:
To control a container's CPU usage, you can use the
--cpu-period and --cpu-quota options with the docker
create and docker run commands from version 1.7.0 of Docker onward.
The --cpu-quota option specifies the number of microseconds
that a container has access to CPU resources during a
period specified by --cpu-period.
As the default value of --cpu-period is 100000, setting the
value of --cpu-quota to 25000 limits a container to 25% of
the CPU resources. By default, a container can use all available CPU resources,
which corresponds to a --cpu-quota value of -1.
答案 3 :(得分:2)
因此,如果我在该主机上运行所有docker容器,它们是否会根据需要消耗CPU /内核,就好像它们是作为该主机操作系统上的正常安装的应用程序一样运行?
是
默认情况下,每个容器对主机CPU周期的访问权限是不受限制的。您可以设置各种约束来限制给定容器访问主机的CPU周期。
docker容器是否会使用自己的进程,并且其中包含的所有处理都将停留在该父进程的CPU核心上?
不。
Docker使用Completely Fair Scheduler在容器之间共享CPU资源。因此容器具有可配置的CPU访问权限。
如何指定docker容器以使用多个内核(例如4个)。我看到有一个-C标志可以指向核心ID,但似乎没有选项指定容器随机选择N个核心。
over 可配置。 Docker中有更多的cpu选项可以组合使用。
- cpus =指定容器可以使用的可用CPU资源量。例如,如果主机有两个CPU而你设置了--cpus =“1.5”,那么容器最多只保证一个半CPU。
- cpuset-cpus限制容器可以使用的特定CPU或核心。如果您有多个CPU,则容器可以使用的以逗号分隔的列表或连字符分隔的CPU范围。第一个CPU编号为0.有效值可能是0-3(使用第一个,第二个,第三个和第四个CPU)或1,3(使用第二个和第四个CPU)。