我知道我可以限制分配给容器的资源,同时使用docker配置CPU和内存的-c
和-m
标志。
但是,有没有办法可以动态地将这些分配的资源更改为容器(在配置它们之后)并且不使用更改的资源重新部署相同的容器?
答案 0 :(得分:20)
当时(Docker v1.11.1)有docker update
(view docs)命令。有了这个,您可以动态更改分配的资源。
Usage: docker update [OPTIONS] CONTAINER [CONTAINER...]
Update configuration of one or more containers
--blkio-weight Block IO (relative weight), between 10 and 1000
--cpu-shares CPU shares (relative weight)
--cpu-period Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota Limit CPU CFS (Completely Fair Scheduler) quota
--cpuset-cpus CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems MEMs in which to allow execution (0-3, 0,1)
--help Print usage
--kernel-memory Kernel memory limit
-m, --memory Memory limit
--memory-reservation Memory soft limit
--memory-swap Swap limit equal to memory plus swap: '-1' to enable unlimited swap
--restart Restart policy to apply when a container exits
答案 1 :(得分:1)
目前还没有 - 有人希望看到有人实现它:https://github.com/docker/docker/issues/6323
答案 2 :(得分:1)
这可能是docker 1.10或1.11(2016年第一季度):PR 15078正在实施(2015年12月)支持更改已停止的和正在运行的容器的资源(包括CPU)
2016年更新:它是part of docker 1.10并记录在docker update
(PR 15078)中。
我们决定允许设置我们称之为资源的资源,其中包括cgroup thingies,因此以下PR #18073。
容器中唯一允许的可变元素在HostConfig中,并且恰好在Resources中(参见struct)。
@Context
- 命令应为
(最后:ContainerRequestFilter
resources := runconfig.Resources{ BlkioWeight: *flBlkioWeight, CpusetCpus: *flCpusetCpus, <==== CpusetMems: *flCpusetMems, <==== CPUShares: *flCPUShares, <==== Memory: flMemory, MemoryReservation: memoryReservation, MemorySwap: memorySwap, KernelMemory: kernelMemory, CPUPeriod: *flCPUPeriod, CPUQuota: *flCPUQuota, }
)。- 允许的更改作为标记传递:例如
set
(正如此PR所做的那样)。update
结构的每个属性都有一个标志(不多也不少)。
请注意,应通过--memory=1Gb --cpushare=…
进行更改
即,这些更改将是永久性的(在容器的JSON中更新)