Ограничение контейнера 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.