如何设置使用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中更新)