Ограничение контейнера Docker на одно процессорное ядро
Я пытаюсь создать систему, которая запускает фрагменты кода в согласованных условиях, и одним из способов, которым я предполагаю, что это возможно, заключается в том, чтобы запускать различные программы в контейнерах докеров с одинаковой компоновкой, резервируя одинаковый объем памяти и т.д.. Однако я не могу понять, как сохранить совместимость процессора.
Ближайшая вещь, которую я могу найти, - это "cpu shares", которые, если я понимаю документацию, ограничивают использование процессора в отношении того, какие другие контейнеры/другие процессы выполняются в системе, и что доступно в системе. Они, похоже, не способны ограничить контейнер абсолютным объемом использования процессора.
В идеале я хотел бы настроить контейнеры докеров, которые будут ограничены использованием одного ядра процессора. Возможно ли это?
Ответы
Ответ 1
Если вы используете более новую версию Docker, вы можете использовать --cpuset-cpus=""
в docker run
для указания ядер процессора, которые вы хотите выделить:
docker run --cpuset-cpus="0" [...]
Если вы используете более старую версию Docker (< 0.9), которая использует LXC в качестве среды исполнения по умолчанию, вы можете использовать --lxc-conf
для настройки выделенных ядер процессора:
docker run --lxc-conf="lxc.cgroup.cpuset.cpus = 0" [...]
В обоих случаях для контейнера докера будет доступно только первое ядро ЦП. Оба эти параметра задокументированы в помощи docker.
Ответ 2
Я попытался предоставить учебник по распределению ресурсов контейнера.
https://gist.github.com/afolarin/15d12a476e40c173bf5f