如何使用docker设置分配给容器的资源?

时间:2013-04-18 13:46:55

标签: docker

正如这个问题的标题所示,我想要使用docker(docker.io)设置容器的最大磁盘/内存和CPU使用率。

有没有办法只使用docker来做到这一点?

6 个答案:

答案 0 :(得分:56)

<强>内存/ CPU

Docker现在支持更多资源分配选项:

  • CPU份额,通过-c flag
  • 内存限制,通过-m标志
  • 特定CPU核心,通过--cpuset flag

有关详细信息,请查看docker run --help

如果使用lxc后端(docker -d --exec-driver=lxc),则可以指定更细粒度的资源分配方案,例如:

docker run --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"\
           --lxc-conf="lxc.cgroup.cpu.shares = 1234"

<强>存储

目前限制存储有点棘手。有关更多详细信息,请参阅以下链接:

答案 1 :(得分:8)

您现在可以使用-c选项为容器分配多个CPU份额,如所述here

答案 2 :(得分:3)

据我所知,您只能传递内存限制(即5MB限制:docker run -m = 5242880 ... image)。 但来自docker.io的人计划添加CPU限制。

答案 3 :(得分:3)

关于-m / --memory -

的说明

如果您正在设置内存限制但容器未分配您尝试保留的内存量,请进入首选项并调整保留给docker应用程序整体的内存。

我遇到了这个问题&#39;在OS X上,并且当我指定--memory=8g

时,我不知道为什么我的容器被限制在〜2G左右

答案 4 :(得分:2)

注意:PR 15078正在实施(2015年12月)支持更改已停止和正在运行容器的资源(可能是docker 1.10 ou 1.11)

  

我们决定允许设置我们称之为资源的资源,其中包括cgroup thingies,因此以下PR #18073
  容器中唯一允许的可变元素在HostConfig中,并且恰好在Resources中(参见struct)。

resources := runconfig.Resources{
        BlkioWeight:       *flBlkioWeight,
        CpusetCpus:        *flCpusetCpus,
        CpusetMems:        *flCpusetMems,
        CPUShares:         *flCPUShares,
        Memory:            flMemory,
        MemoryReservation: memoryReservation,
        MemorySwap:        memorySwap,
        KernelMemory:      kernelMemory,
        CPUPeriod:         *flCPUPeriod,
        CPUQuota:          *flCPUQuota,
    }
  
      
  • 该命令应为set
  •   
  • 允许的更改作为标记传递:例如--memory=1Gb --cpushare=…(正如此PR所做的那样)。
  •   
  • Resources结构的每个属性都有一个标志(不多也不少)。
  •   

请注意,应通过docker set进行更改 即,这些更改将是永久性的(在容器的JSON中更新)

答案 5 :(得分:1)

请参阅此要点:https://gist.github.com/afolarin/15d12a476e40c173bf5f

1)你给了cpus的相对份额--cpu-share =&#39; relative-number&#39;

2)你现在可以对cpus施加硬性限制:

--cpuset=""
specify which cpus by numeric id, 0=first, n=nth cpu. specify by contiguous "1-5" or discontiguous "1,3,5" ranges.

如果使用LXC而不是默认的libcontainer,那么您也可以在:

中指定它
--lxc-conf=[]              
(lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"

RAM:

-m, --memory=""            Memory limit (format: <number><optional unit>, where unit = b, k, m or g)