Назад к вопросам
Middle
88
questionbank
Как осуществляется ограничение ресурсов в Docker?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Docker использует cgroups (control groups) и namespaces для ограничения и изоляции ресурсов контейнеров.
- cgroups позволяют ограничивать и учитывать использование ресурсов (CPU, память, I/O, сеть).
- Namespaces обеспечивают изоляцию процессов, сети, монтированных точек, пользователей.
Основные параметры ограничения ресурсов:
- CPU:
--cpu-shares: Задает относительную "важность" контейнера. Контейнер получает долю доступного CPU пропорционально этому значению по сравнению с другими контейнерами, имеющими--cpu-shares. По умолчанию 1024.--cpu-quota: Ограничивает использование CPU абсолютным значением в микросекундах за период--cpu-period. Например,--cpu-period=100000 --cpu-quota=50000означает 50% одного ядра.--cpuset-cpus: Ограничивает контейнер конкретными ядрами процессора (например,0,1или0-3).--cpuset-mems: Ограничивает доступ контейнера к определенным узлам памяти NUMA.
- Память:
--memory: Ограничивает объем оперативной памяти, доступной контейнеру. Поддерживаются суффиксыb,k,m,g.--memory-swap: Устанавливает лимит на общую память (RAM + Swap). Если меньше--memory, то контейнер не может использовать swap. Если--memory-swapбольше--memory, то разница между ними - это максимально доступный swap.--memory-swappiness: Устанавливает коэффициент swappiness для контейнера (по умолчанию -1, что соответствует настройкам хоста).--memory-reservation: Мягкое ограничение памяти. Контейнер будет использовать не менее этого объема, если он доступен, но может потреблять и больше, до--memory. Система попытается сохранить этот объем для контейнера при давлении на память.--kernel-memory: Ограничивает память ядра, используемую контейнером.
- I/O (Block IO):
--blkio-weight: Задает относительный вес для блочного ввода-вывода (по умолчанию 500). Влияет на распределение пропускной способности I/O.--blkio-weight-device: Устанавливает вес для конкретного блочного устройства.--device-read-bps/--device-write-bps: Ограничивает скорость чтения/записи (в байтах в секунду) для конкретного устройства.--device-read-iops/--device-write-iops: Ограничивает количество операций чтения/записи в секунду для конкретного устройства.
- Network:
Непрямое ограничение через настройку сетевых интерфейсов в пространстве имен сети или с помощью инструментов уровня операционной системы (например,
tc).
Пример использования:
# Запуск контейнера с ограничением CPU (50% одного ядра) и памяти (512MB)
docker run -d --name my_limited_app \
--cpu-quota=50000 --cpu-period=100000 \
--memory=512m \
my_image:latest
# Запуск контейнера с ограничением CPU до ядер 0 и 1, памятью 1GB и блочным весом 700
docker run -d --name another_limited_app \
--cpuset-cpus="0,1" \
--memory=1g \
--blkio-weight=700 \
another_image:latest