Как название этого вопроса предполагает, что я хочу установить максимальный объем дискового пространства/памяти и процессора для контейнера с помощью docker (docker.io).
Есть ли способ сделать это, используя только докер?
Как название этого вопроса предполагает, что я хочу установить максимальный объем дискового пространства/памяти и процессора для контейнера с помощью docker (docker.io).
Есть ли способ сделать это, используя только докер?
памяти/ЦП
Теперь Docker поддерживает дополнительные возможности выделения ресурсов:
Посмотрите 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 МБ: запуск докера -m = 5242880... изображение), как я знаю. Но ребята из docker.io планировали добавить пределы процессора.
Примечание: PR 15078 реализует (декабрь 2015 г.) поддержку для изменения ресурсов как для остановленного, так и для запуска контейнера (возможно, докер 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
должно сохраняться.
I.e., эти изменения будут постоянными (обновляется в контейнере JSON).
Только примечание о -m / --memory
-
Если вы устанавливаете ограничение памяти, но контейнер не выделяет объем памяти, который вы пытаетесь зарезервировать, перейдите в настройки и настройте память, зарезервированную для приложения-докера в целом.
Я столкнулся с этой "проблемой" на OS X и не был уверен, почему мой контейнер был ограничен ~ 2G, когда я указывал --memory=8g
см. этот смысл: https://gist.github.com/afolarin/15d12a476e40c173bf5f
1) Вы даете относительную долю в cpus с --cpu-share = 'relative-number'
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)