Docker Compose

Compose Resource Limits Generator

Сгенерировать блок ограничений CPU и памяти для сервиса.

Как это работает

Один прожорливый контейнер без ограничений способен положить весь хост, съев всю доступную память во время утечки или бага в коде. Как ограничить cpu и память контейнера compose вопрос, который стоит решить до того, как это случится в проде, а не после. Compose resource limits generator online собирает готовый блок deploy resources по введенным лимитам.

Инструмент генерирует блок с ограничениями через ключ deploy.resources.limits, где cpus задает максимальную долю ядра процессора в виде дробного числа, а memory задает предел оперативной памяти в понятных единицах вроде 512M или 1G, без необходимости помнить точный синтаксис вложенности YAML.

Полезно применять для сервисов с непредсказуемой или потенциально растущей нагрузкой, для ограничения ресурсов тестовых окружений на общем хосте с другими проектами, или просто как базовая гигиена production конфигурации перед первым боевым деплоем.

Частые вопросы

Работают ли лимиты deploy.resources в обычном docker compose up без Swarm?

Начиная с новых версий Docker Compose ограничения deploy.resources применяются и в обычном режиме без Swarm, хотя изначально этот ключ задумывался именно для оркестрации Swarm, стоит проверить версию compose на вашей машине.

Что происходит, если контейнер превышает установленный лимит памяти?

Docker принудительно завершает процесс внутри контейнера через механизм OOM killer ядра Linux, это может привести к неожиданному перезапуску сервиса, поэтому лимит стоит подбирать с запасом относительно реального потребления.

Как узнать реальное потребление ресурсов сервиса перед установкой лимита?

Полезно понаблюдать за метриками через docker stats в течение обычной работы под нагрузкой некоторое время, и уже по этим цифрам с разумным запасом выставлять итоговый лимит, а не гадать наугад.

Можно ли задать только лимит памяти без ограничения cpu?

Да, оба поля независимы друг от друга, можно указать только memory, оставив cpu без явного ограничения, если процессорное время для конкретного сервиса не является узким местом.