Назад к вопросам
Middle
111
questionbank
Как осуществляется ограничение ресурсов в Docker?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Ограничение ресурсов в Docker реализуется через namespaces и control groups (cgroups) ядра Linux. Namespaces изолируют системные ресурсы, а cgroups ограничивают, учитывают и изолируют использование ресурсов для групп процессов.
Ключевые параметры для ограничения ресурсов:
- CPU:
--cpu-shares: Весовое значение для распределения CPU между контейнерами, когда он ограничен. Значение по умолчанию 1024.--cpu-quota: Максимальное количество времени CPU (в микросекундах) для использования в течение периода (--cpu-period). По умолчанию 100000.--cpu-period: Период времени CPU (в микросекундах) для--cpu-quota.--cpuset-cpus: Указывает, какие ядра CPU могут использовать контейнеры.
- Memory:
--memory: Жесткий лимит по оперативной памяти. Если контейнер превышает этот лимит, он может быть завершен.--memory-swap: Жесткий лимит по сумме оперативной памяти и swap.--memory-reservation: Мягкий лимит по оперативной памяти. При ограничении ресурсов, контейнеры с меньшим reservation будут раньше вытеснены в swap, чем те, у кого memory-reservation больше.--kernel-memory: Лимит по памяти ядра.--memswap-swappiness: Насколько охотно ядро будет использовать swap для этого контейнера (от 0 до 100). 0 - очень неохотно, 100 - очень охотно.
- Block I/O:
--blkio-weight: Весовое значение для распределения I/O между контейнерами.--blkio-weight-device: Весовое значение для отдельного устройства block I/O.--device-read-bps: Лимит на скорость чтения с устройства (байты в секунду).--device-write-bps: Лимит на скорость записи на устройство (байты в секунду).--device-read-iops: Лимит на количество операций чтения с устройства (операции в секунду).--device-write-iops: Лимит на количество операций записи на устройство (операции в секунду).
- Network:
- Ограничение сетевых ресурсов напрямую через флаги
docker runограничено. Обычно для этого используются внешние инструменты, например,tc(traffic control), netem или инструменты оркестрации (Kubernetes NetworkPolicy).
- Ограничение сетевых ресурсов напрямую через флаги
Примеры использования:
# Запуск контейнера с ограничением CPU Shares и памяти
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity
# Запуск контейнера с жестким лимитом CPU Quota и Memory
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity
Docker преобразует эти флаги в соответствующие настройки cgroups для группы процессов, запущенных внутри контейнера. Эти настройки управляются через виртуальную файловую систему /sys/fs/cgroup внутри контейнера (при монтировании) и на хост-системе.