如何通过“docker run”将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集

我有一个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集

数字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容器
注意:正在实施(2015年12月)对已停止和正在运行的容器(可能是docker 1.10 ou 1.11)更改资源(包括CPU)的支持

我们决定允许设置我们称之为resources的内容,目前它由cgroup thingies组成,因此如下所示。
容器中唯一允许的可变元素在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