«1. Обзор
Во многих случаях нам необходимо ограничить использование ресурсов на хост-компьютере докера.
В этом руководстве мы узнаем, как установить лимит памяти и ЦП для контейнеров докеров.
2. Установка лимита ресурсов с помощью docker run
Мы можем установить ограничения ресурсов непосредственно с помощью команды docker run. Это простое решение. Однако ограничение будет применяться только к одному конкретному исполнению образа.
2.1. Память
Например, давайте ограничим память, которую может использовать контейнер, до 512 мегабайт. Чтобы ограничить память, нам нужно использовать параметр m:
$ docker run -m 512m nginx
Мы также можем установить мягкое ограничение, называемое резервированием. Он активируется, когда докер обнаруживает нехватку памяти на хост-компьютере:
$ docker run -m 512m --memory-reservation=256m nginx
2.2. ЦП
По умолчанию доступ к вычислительной мощности хост-машины не ограничен. Мы можем установить лимит процессоров, используя параметр cpus. Например, давайте ограничим использование нашим контейнером не более двух ЦП:
$ docker run --cpus=2 nginx
Мы также можем указать приоритет выделения ЦП. Значение по умолчанию — 1024, чем выше число, тем выше приоритет:
$ docker run --cpus=2 --cpu-shares=2000 nginx
Подобно резервированию памяти, доли ЦП играют основную роль, когда вычислительной мощности недостаточно и ее необходимо разделить между конкурирующими процессами.
3. Установка лимита памяти с помощью файла docker-compose
Мы можем добиться аналогичных результатов, используя файлы docker-compose. Имейте в виду, что формат и возможности будут различаться в разных версиях docker-compose.
3.1. Версии 3 и новее С docker swarm
Дадим сервису Nginx ограничение в половину ЦП и 512 мегабайт памяти и резервирование четверти ЦП и 128 мегабайт памяти. Нам нужно создать сегменты «deploy», а затем «resources» в конфигурации нашего сервиса:
services:
service:
image: nginx
deploy:
resources:
limits:
cpus: 0.50
memory: 512M
reservations:
cpus: 0.25
memory: 128M
Чтобы воспользоваться преимуществами сегмента deploy в файле docker-compose, нам нужно использовать команду docker stack. Чтобы развернуть стек в рой, мы запускаем команду deploy:
$ docker stack deploy --compose-file docker-compose.yml bael_stack
3.2. Версия 2 С docker-compose
В более старых версиях docker-compose мы можем установить ограничения ресурсов на том же уровне, что и основные свойства службы. Они также имеют немного разные имена:
service:
image: nginx
mem_limit: 512m
mem_reservation: 128M
cpus: 0.5
ports:
- "80:80"
Чтобы создать настроенные контейнеры, нам нужно запустить команду docker-compose:
$ docker-compose up
4. Проверка использования ресурсов
После того, как мы установили лимиты, мы можем проверьте их с помощью команды docker stats:
$ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
8ad2f2c17078 bael_stack_service.1.jz2ks49finy61kiq1r12da73k 0.00% 2.578MiB / 512MiB 0.50% 936B / 0B 0B / 0B 2
5. Резюме
В этом руководстве мы рассмотрели способы ограничения доступа докера к ресурсам хоста. Мы рассмотрели использование команд docker run и docker-compose. Наконец, мы контролировали потребление ресурсов с помощью статистики докеров.