如何通过“docker run”将50%的CPU资源分配给docker容器?
我有一个4核CPU,我想将50%的CPU资源分配给docker容器。如何通过“docker run”将50%的CPU资源分配给docker容器?,docker,Docker,我有一个4核CPU,我想将50%的CPU资源分配给docker容器。 阅读手册和源代码后。 我仍然不知道如何使用-c,--cpu shares=0选项 docker run -c 0.5 -i -t ubuntu /bin/bash 或 cpu共享是一个“相对权重”,相对于默认设置1024,因此如果有两个容器在同一个内核上运行,则可以通过调整数字为它们提供cpu 50-50或80-20或任何您想要的值。它是一个整数 您不能使用此标志给出总体限制,但可以使用--cpuset限制容器运行的CPU集
阅读手册和源代码后。
我仍然不知道如何使用
-c,--cpu shares=0
选项
docker run -c 0.5 -i -t ubuntu /bin/bash
或
cpu共享是一个“相对权重”,相对于默认设置1024,因此如果有两个容器在同一个内核上运行,则可以通过调整数字为它们提供cpu 50-50或80-20或任何您想要的值。它是一个整数 您不能使用此标志给出总体限制,但可以使用
--cpuset
限制容器运行的CPU集
数字1024在表中
Marek Goldmann在Docker中解释了资源管理
另请参见,其中说明可以使用lxc(旧的Docker实现),但不能使用libcontainer(当前的Docker实现)。这取决于环境,因此没有直接的答案,只能继续阅读
从
docker运行--help
命令:
-c, --cpu-shares=0 CPU shares (relative weight)
因为Docker是基于cGroup的。CPU将分布在运行的容器中。默认情况下,该值为1024
cat /sys/fs/cgroup/cpu/docker/cpu.shares
1024
因此,如果我们有两个容器,一个用于数据库,另一个用于web服务器
sudo docker run -c 614 -dit --name db postgres /postgres.sh
sudo docker run -c 410 -dit --name web nginx /nginx.sh
将60%分配给db
容器(614是1024的60%),40%分配给web
容器
欲了解更多信息,请参阅:
选项:cpuset
--cpuset=”“允许执行(0-3,0,1)的CPU
- 邮局
- 第3章配置Shrikrishna Holla的《管弦乐队的Docker》一书中的Docker容器
容器中唯一允许的可变元素在HostConfig中,确切地说是在参考资料中(请参阅)
resources:=runconfig.resources{
BlkioWeight:*flBlkioWeight,
CpusetCpus:*flCpusetCpus,看看这里,这显然是您要找的:
默认的CPU CFS(完全公平调度程序)周期为100ms。我们可以使用--CPU周期来设置CPU的周期,以限制容器的CPU使用。通常--CPU周期应与--CPU配额一起使用
示例:
$ docker run -it --cpu-period=50000 --cpu-quota=25000 ubuntu:14.04 /bin/bash
如果有1个CPU,这意味着容器可以每50ms获得50%的CPU运行时间
期间和配额定义:
内
每个给定的“周期”(微秒),一个组最多只能消耗
CPU时间的“配额”微秒。当
组超出此限制(在该期间),属于其
层次结构将被限制,在下一个
期间。自Docker 1.13以来,在您的4核机器中,只需添加Docker容器运行--CPU 2.0[args…]
解释来自:
但是,在1.13中,如果您希望容器限制为一个cpu,则可以将--cpu 1.0
添加到Docker运行/创建命令行。如果您希望将两个半cpu作为容器的限制,则只需添加--cpu 2.5
。在Docker中,我们使用CFS配额和周期将容器的cpu使用限制为你想要什么,为你做计算
另外。我需要将整数(1024)传递给-c
选项还是浮点(0.2)?Shippyard——cpu 0.1
选项是否直接传递给docker?谢谢。对于普通docker,cpu共享采用整数。代码如下:我对Shippyard不太了解,但从他们的代码来看,“cpu”是一个浮点数;我不知道如何直接传递给docker,因为docker没有该选项。你看过“资源的运行时限制”
部分我知道这个问题已经得到了回答,但为了使这个问题更有用,我建议澄清一下:是关于设置cpu资源的最小(QOS)还是最大(限制、配额)?标题是min,但示例是max。可接受的答案是两者都有(cpu共享是min,但cpuset是max)
resources := runconfig.Resources{
BlkioWeight: *flBlkioWeight,
CpusetCpus: *flCpusetCpus, <====
CpusetMems: *flCpusetMems, <====
CPUShares: *flCPUShares, <====
Memory: flMemory,
MemoryReservation: memoryReservation,
MemorySwap: memorySwap,
KernelMemory: kernelMemory,
CPUPeriod: *flCPUPeriod,
CPUQuota: *flCPUQuota,
}
$ docker run -it --cpu-period=50000 --cpu-quota=25000 ubuntu:14.04 /bin/bash