基于Docker基于LXC的事实,我的建议是Docker容器从其主机操作系统共享各种资源。我担心的是CPU内核。这是一个场景:
a)因此,如果我在该主机上运行所有docker容器,它们是否会根据需要消耗CPU /内核,就像它们是作为主机操作系统上的正常安装的应用程序一样运行?
b)docker容器是否会使用自己的进程,并且其中包含的所有处理都将粘贴到该父进程的CPU核心?
c)如何指定一个docker容器来使用多个内核(例如4个)。我看到有一个-C标志可以指向核心ID,但似乎没有选项指定容器随机选择N个核心。
目前,我认为docker不提供这种级别的粒度。它没有指定它在lxc.conf文件中分配的内核数量,因此您将获得每个docker的所有内核(可能是1,我不是100%肯定)。
但是,您可以调整为给定容器生成的conf文件并设置类似的内容
cpuset {
cpuset.cpus="0-3";
}
可能是最新(少数)版本的内容发生了变化。现在你可以使用docker run
的参数约束你的docker容器:新docker版本中当前答案的等价物是docker run ubuntu /bin/echo 'Hello world --cpuset-cpus="0-3"
但是,这会将docker进程限制为这些CPU,但是(如果我错了请纠正我)其他容器可以也要求同一套。一种可能更好的方法是使用CPU份额。
来自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.
因此,如果我在该主机上运行所有docker容器,它们是否会根据需要使用CPU /内核,就好像它们是作为主机操作系统上的正常安装的应用程序一样运行?
是。
默认情况下,每个容器对主机CPU周期的访问权限是不受限制的。您可以设置各种约束来限制给定容器访问主机的CPU周期。
docker容器是否会使用自己的进程,并且其中包含的所有处理都将粘贴到该父进程的CPU核心?
不。
Docker使用Completely Fair Scheduler在容器之间共享CPU资源。因此容器具有可配置的CPU访问权限。
如何指定docker容器以使用多个内核(例如4个)。我看到有一个-C标志可以指向核心ID,但似乎没有选项指定容器随机选择N个核心。
它是 过度 可配置的。 Docker中有更多的cpu选项可以组合使用。
--cpus =指定容器可以使用的可用CPU资源量。例如,如果主机有两个CPU并且您设置了--cpus =“1.5”,则容器最多只保证一个半CPU。
--cpuset-cpus限制容器可以使用的特定CPU或核心。如果您有多个CPU,则容器可以使用的以逗号分隔的列表或连字符分隔的CPU范围。第一个CPU编号为0.有效值可能是0-3(使用第一个,第二个,第三个和第四个CPU)或1,3(使用第二个和第四个CPU)。