正如这个问题的标题所示,我想要使用docker(docker.io)设置容器的最大磁盘/内存和CPU使用率。
有没有办法只使用docker来做到这一点?
答案 0 :(得分:56)
<强>内存/ CPU 强>
Docker现在支持更多资源分配选项:
有关详细信息,请查看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
答案 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)