1. Обзор
Есть много случаев, когда нам нужно ограничить использование ресурсов на хост-компьютере докера.
В этом руководстве мы узнаем, как установить лимит памяти и ЦП для контейнеров Docker.
2. Установка лимита ресурсов с запуском докера
Мы можем установить лимиты ресурсов напрямую, используя команду запуска docker
. Это простое решение. Однако ограничение будет применяться только к одному конкретному исполнению образа.
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
Чтобы воспользоваться сегментом развертывания
в файле 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
. Наконец, мы контролировали потребление ресурсов с помощью docker stats
.