Как установить ресурсы, выделенные контейнеру с помощью docker?
как следует из названия этого вопроса, я хочу установить максимальное использование диска / памяти и процессора для контейнера с помощью docker (docker.io).
есть ли способ сделать это, используя только докер?
6 ответов:
память/процессор
Docker теперь поддерживает больше вариантов распределения ресурсов:
- CPU shares, via-C flag
- ограничение памяти, флаг via-m
- конкретные ядра процессора, через -- cpuset флаг
посмотреть
docker run --help
для более подробной информации.Если вы используете lxc backend (
docker -d --exec-driver=lxc
), можно указать более мелкозернистые схемы распределения ресурсов, например:docker run --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"\ --lxc-conf="lxc.cgroup.cpu.shares = 1234"
для хранения
ограничение хранения немного сложнее на данный момент. Пожалуйста, обратитесь к следующим ссылкам для более подробной информации:
теперь вы можете выделить несколько общих ресурсов процессора для контейнера с опцией-c, как описано здесь
вы можете передать только ограничение памяти (т. е. ограничение 5 Мб: docker run-m=5242880 ...изображение) как я знаю. Но ребята из docker.io планируется добавить ограничения процессора.
Примечание: PR 15078 реализует (декабря. 2015) поддержка изменения ресурсов как для остановленных и под управлением контейнер (возможно docker 1.10 ou 1.11)
мы решили разрешить установить то, что мы назвали ресурсами, который состоит из cgroup thingies на данный момент, следовательно, следующее PR #18073.
Единственные разрешенные изменяемые элементы контейнера находятся в HostConfig и точно в ресурсах (см. 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)
просто заметка о
-m / --memory
--Если вы устанавливаете ограничение памяти, но контейнер не выделяет объем памяти, который вы пытаетесь зарезервировать, перейдите в настройки и отрегулируйте память, зарезервированную для приложения docker в целом.
я столкнулся с этой "проблемой" на OS X и не был уверен, почему мой контейнер был ограничен ~2G, когда я указывал
--memory=8g
смотрите эту суть:https://gist.github.com/afolarin/15d12a476e40c173bf5f
1) Вы даете относительную долю процессоров с --cpu-share= 'relative-number'
2) Теперь вы можете поставить жесткие ограничения на процессорах:
--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)