Перейти к основному содержимому

Установка ограничений памяти и ЦП в Docker

· 3 мин. чтения

Задача: Медиана двух отсортированных массивов

Даны два отсортированных массива размерами n и m. Найдите медиану слияния этих двух массивов.
Временная сложность решения должна быть O(log(m + n)) ...

ANDROMEDA

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 .