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

由于这个问题的标题表明我想要设置容器使用docker(docker.io)的最大磁盘/内存和CPU使用率。

有没有办法做到这一点,只是docker?

内存/ CPU

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

  • CPU共享,通过-c标志
  • 内存限制,通过-m标志
  • 特定的CPU核心,通过–cpuset标志

看看docker run --help帮助更多的细节。

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

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

存储

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

  • 使用Device Mapper插件调整Docker容器的大小
  • 关于资源限制的问题?
  • devicemapper – 基于Device Mapper的存储后端

您现在可以使用-c选项将一些CPU份额分配给容器,如此处所述

你可以传递只有内存限制(即5MB的限制:docker运行-m = 5242880 …图片),据我所知。 但是来自docker.io的人计划增加CPU限制。

只需要注意一下-m / --memory

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

我遇到了OS X的这个'问题',并不知道为什么我的容器被限制在2G时,我指定 – --memory=8g

看到这个要点: https : //gist.github.com/afolarin/15d12a476e40c173bf5f

1)你用cpu-share ='relative-number'给出了一个cpus的相对份额

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" 

内存:

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

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

我们决定允许设置我们所谓的资源,现在由cgroup东西组成,因此下面的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结构的每个属性都有一个标志(不多也不less)。

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