Подтвердить что ты не робот

Ограничить размер диска и пропускную способность контейнера Docker

У меня есть физическая хост-машина, на которой работает Ubuntu 14.04. Он имеет пропускную способность 100 ГБ и 100 Мбит сети. Я установил Docker и запустил 10 контейнеров. Я хотел бы ограничить каждый контейнер максимальным диском 10G и пропускной способностью 10M.

После прохождения официальных документов и поиска в Интернете я до сих пор не могу найти способ выделения указанного размера диска и пропускной способности сети в контейнер.

Я думаю, что это может быть невозможно в Docker напрямую, возможно, нам нужно обойти Docker. Означает ли это, что мы должны использовать что-то "базовое", такое как LXC или Cgroup? Кто-нибудь может дать какие-то предложения?


Edit:

@Mbarthelemy, ваше предложение, похоже, работает, но у меня все еще есть некоторые вопросы о диске:

1) Можно ли разместить в каждом контейнере другой размер (например, 20G, 30G и т.д.)? Вы сказали, что он жестко закодирован в Docker, поэтому кажется невозможным.

2) Я использую приведенную ниже команду для запуска демона Docker и контейнера:

docker -d -s devicemapper
docker run -i -t training/webapp /bin/bash

то я использую df -h для просмотра использования диска, он дает следующий результат:

Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/docker-longid   9.8G  276M  9.0G   3% /
/dev/mapper/Chris--vg-root   27G  5.5G   20G  22% /etc/hosts

из вышеизложенного я думаю, что максимальный диск, который может использовать контейнер, по-прежнему больше 10G, что вы думаете

4b9b3361

Ответ 1

Я не думаю, что это возможно сейчас, используя настройки Docker по умолчанию. Вот что я хотел бы попробовать.

Примечание. Параметры --storage-driver=devicemapper и -e lxc для Docker daemon, а не для клиента Docker, который вы используете при запуске docker run ........

Ответ 2

Новая версия релизов имеет --device-read-bps и --device-write-bps.

Вы можете использовать:

docker run --device-read-bps=/dev/sda:10mb

Больше информации здесь:

https://blog.docker.com/2016/02/docker-1-10/

Ответ 3

Если у вас есть доступ к контейнерам, вы можете использовать tc для контроля пропускной способности внутри них.

Например: в вашем сценарии точки входа вы можете добавить: tc qdisc add dev eth0 root tbf rate 240kbit burst 300kbit latency 50ms

иметь полосу пропускания 240 кбит/с, пакетную передачу 300 кбит/с и задержку 50 мс.

Вам также нужно передать команду --cap-add=NET_ADMIN команде docker run, если вы не запускаете контейнеры как root.