«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. Наконец, мы контролировали потребление ресурсов с помощью статистики докеров.