VPS с 4 vCPU, 8 GB RAM и 80 GB NVMe обычно тянет 10–20 типовых Docker-контейнеров, если среди них нет тяжёлой базы данных, транскодирования видео или ML-инференса.
Что определяет docker host server requirements
Контейнеры не равны виртуальным машинам
Docker-контейнеры используют общее ядро Linux, поэтому 15 контейнеров не означают 15 отдельных ОС. Лёгкие сервисы — Nginx, Traefik, Redis с небольшим кэшем, Telegram-бот, статический сайт, exporter для Prometheus — могут потреблять 20–150 MB RAM в простое. Однако docker host server requirements определяются не числом контейнеров как таковым, а их суммарной пиковой нагрузкой.
На одном VPS могут работать 30 контейнеров, если это небольшие сервисы с лимитами памяти. И наоборот, 3 контейнера способны полностью занять сервер: PostgreSQL на 8 GB, Elasticsearch на 4 GB и приложение, которое кодирует видео через FFmpeg. При подборе инфраструктуры полезно сначала оценить требования к серверу для self-hosted приложений под нагрузку, а затем распределить ресурсы между сервисами.
Формула расчёта ресурсов Docker-хоста
Рабочая формула для production: ресурсы хоста = сумма лимитов контейнеров + 25–40% резерва + ресурсы ОС. Для Linux, Docker Engine, journald, SSH и системного кэша оставляйте минимум 1 GB RAM, а на VPS с 2 GB RAM — не менее 400–600 MB свободной памяти.
RAM хоста = RAM контейнеров + 1 GB для ОС + 30% запас
CPU хоста = пиковая сумма CPU контейнеров × 1,25
Диск = данные + образы + логи + 30% свободного места
Трафик = входящий + исходящий + резерв под обновления и бэкапы
Например, приложение на 512 MB, PostgreSQL на 1 GB, Redis на 256 MB, Nginx на 128 MB и мониторинг на 512 MB требуют 2,4 GB по лимитам. С ОС и запасом это уже 4,5–5 GB, поэтому практичный минимум — VPS с 6 GB RAM, а безопасный выбор — 8 GB.
How much RAM for Docker host: сколько памяти закладывать
Память важнее номинального числа контейнеров
Вопрос how much ram for docker host нужно решать по рабочим наборам данных. База PostgreSQL использует RAM для shared_buffers и page cache, Redis хранит кэш в памяти, а Java-приложения и Elasticsearch резервируют heap. Контейнер без memory limit при пике может занять всю RAM VPS и вызвать OOM Killer.
- 2 GB RAM: 3–6 лёгких контейнеров, reverse proxy, бот, небольшой сайт, SQLite или внешний managed DB.
- 4 GB RAM: 5–10 сервисов, WordPress или Node.js-приложение, PostgreSQL до 1 GB рабочих данных, Redis до 256 MB.
- 8 GB RAM: 10–20 контейнеров, несколько приложений, PostgreSQL, Redis, мониторинг и ежедневные бэкапы.
- 16 GB RAM: 20–35 контейнеров, несколько БД, Grafana, Prometheus, CI-runner или умеренная аналитика.
- 32 GB RAM и выше: Elasticsearch, ClickHouse, крупные PostgreSQL-инстансы, медиасервисы и интенсивные очереди.
Swap не заменяет оперативную память. Небольшой swap-файл на 1–2 GB помогает пережить краткий пик, но постоянная работа со swap увеличивает задержки базы данных в десятки раз. Для PostgreSQL и Redis лучше масштабировать RAM раньше, чем ждать, пока сервер начнёт активно обмениваться данными с диском.
Лимиты памяти в Compose
Даже на сервере с 8 GB RAM контейнеры должны иметь ограничения. Они предотвращают ситуацию, когда один процесс Node.js или PHP-FPM вытесняет базу данных и прокси.
services:
app:
image: ghcr.io/example/app:latest
mem_limit: 768m
cpus: 1.0
restart: unless-stopped
postgres:
image: postgres:16
mem_limit: 1500m
cpus: 1.5
environment:
POSTGRES_PASSWORD: change-me
Лимиты не должны быть слишком низкими: контейнеру PostgreSQL с лимитом 256 MB будет не хватать памяти даже при небольшой нагрузке. После запуска проверяйте фактическое потребление через docker stats в часы пика.
Ищете надёжный сервер для ваших проектов?
VPS от $10/мес и выделенные серверы от $9/мес с NVMe, DDoS-защитой и поддержкой 24/7.
Смотреть предложения →Сервер под Docker: требования для стеков из 5, 15 и 30 контейнеров
Таблица-конструктор типовой конфигурации
Ниже приведены ориентиры для Linux VPS с Ubuntu 22.04/24.04, Docker Engine и NVMe-диском. В расчёт включён запас около 30% на пики, обновления образов, файловый кэш и кратковременный рост логов.
| Типовой стек | Примеры сервисов | vCPU с запасом | RAM с запасом | Диск | Трафик в месяц |
|---|---|---|---|---|---|
| 5 контейнеров | Nginx, приложение, PostgreSQL, Redis, cron | 2 vCPU | 4 GB | 50 GB NVMe | 0,5–1 TB |
| 15 контейнеров | 2–4 приложения, БД, Redis, Traefik, worker, мониторинг | 4 vCPU | 8 GB | 80–120 GB NVMe | 1–3 TB |
| 30 контейнеров | Несколько приложений, 2 БД, очереди, Prometheus, Grafana, exporters | 6–8 vCPU | 16 GB | 160–250 GB NVMe | 3–6 TB |
Эта таблица отвечает на вопрос сколько контейнеров потянет VPS только для обычных web-стеков. Один контейнер с Minecraft-сервером, игровой сервер с активным миром или видеотранскодер может потребовать больше CPU, чем 20 API-сервисов. Для игровых нагрузок полезна отдельная оценка: например, требования к игровому серверу и числу игроков зависят от движка, мира и частоты тиков.
Как распределить ресурсы в типовом стеке
Для 15 контейнеров на 8 GB RAM разумно выделить 1,5 GB PostgreSQL, 512 MB Redis, 2–3 GB приложениям и worker-процессам, до 1 GB мониторингу и примерно 2 GB оставить ОС, Docker-кэшу и резерву. На 4 vCPU не назначайте всем сервисам лимит по 2 CPU: лимиты могут суммарно превышать число ядер, но в таком случае нужно тестировать одновременные пики.
Для проверки производительности CPU используйте sysbench cpu --threads=4 --cpu-max-prime=20000 run. Для web-приложения важнее стабильное время ответа под нагрузкой, чем формальное число ядер. Процессор с частотой от 3,0 GHz на ядро обычно лучше подходит для однопоточных задач PHP, Python и игровых серверов, чем большее число медленных vCPU.
Docker host RAM CPU sizing по масштабу нагрузки
Масштаб → спека для production VPS
Для Docker-хоста с 15 контейнерами и до 100 одновременных пользователей достаточно 4 vCPU, 8 GB RAM и 80 GB NVMe-диска.
| Масштаб нагрузки | vCPU | RAM | Диск | Сетевой порт | Цена |
|---|---|---|---|---|---|
| До 25 одновременных пользователей | 2 vCPU | 4 GB | 50 GB NVMe | 1 Gbps | от $6/мес, ориентировочно на март 2025 |
| До 100 одновременных пользователей | 4 vCPU | 8 GB | 80 GB NVMe | 1 Gbps | от $12/мес, ориентировочно на март 2025 |
| До 300 одновременных пользователей | 6 vCPU | 16 GB | 160 GB NVMe | 1 Gbps | от $24/мес, ориентировочно на март 2025 |
| До 1 000 одновременных пользователей | 8–12 vCPU | 32 GB | 300 GB NVMe | 1 Gbps | от $48/мес, ориентировочно на март 2025 |
Цены являются общерыночным ориентиром, а не публичной офертой: итоговая стоимость зависит от региона, типа виртуализации, NVMe-объёма, включённого трафика и резервного копирования. Для интернет-магазина, SaaS или API важнее измерить RPS, p95 latency, запросы к БД и объём очередей, чем ориентироваться только на число зарегистрированных пользователей.
Docker server hardware requirements: CPU, NVMe и сеть
Когда CPU становится узким местом
Docker server hardware requirements по CPU особенно критичны для PHP-FPM, Node.js worker-процессов, Java, компиляции образов, шифрования, сжатия резервных копий и задач FFmpeg. Если средняя загрузка 4 vCPU постоянно превышает 65–70%, у хоста почти не остаётся запаса для пика или обновления контейнеров.
Проверяйте не только среднее значение CPU %, но и load average. На VPS с 4 vCPU краткий load 4–5 допустим, но устойчивый load 8–10 означает очередь задач на процессоре. Для CI/CD и сборки образов отделите runner от production-хоста: сборка React, Go или Python-зависимостей способна временно занять все ядра.
Почему NVMe важнее большого HDD
Диск Docker-хоста хранит образы, writable layers, volumes, логи и бэкапы. Для PostgreSQL, MySQL, Redis с AOF и Prometheus приоритетны низкие задержки I/O. NVMe обычно даёт заметно более предсказуемую работу при случайных операциях, чем медленный сетевой SSD или HDD.
- Оставляйте не менее 25–30% диска свободным: заполненный том замедляет БД и ломает обновления образов.
- Ограничивайте размер json-логов Docker: без ротации один аварийный контейнер может занять десятки GB.
- Выносите ежедневные бэкапы за пределы основного VPS: локальная копия не спасает при удалении сервера.
- Для БД с активной записью планируйте отдельный volume и следите за IOPS, а не только за GB.
{
"log-driver": "local",
"log-opts": {
"max-size": "20m",
"max-file": "5"
}
}
Конфигурацию сохраните в /etc/docker/daemon.json, затем выполните systemctl restart docker. Перед перезапуском убедитесь, что сервисы имеют restart: unless-stopped.
Self hosted Docker server specs для баз данных и медиа
Тяжёлые контейнеры меняют расчёт
Self hosted Docker server specs для базы данных нельзя выбирать по той же таблице, что и для статических сайтов. PostgreSQL с рабочим набором 5–10 GB требует 16 GB RAM на хосте, если рядом работают приложение, Redis и мониторинг. Elasticsearch обычно нужен отдельный запас памяти: JVM heap в 2–4 GB не равен общему потреблению процесса и page cache.
Контейнер с Jellyfin, Plex или FFmpeg может использовать 2–8 vCPU на одно программное транскодирование 1080p. При аппаратном транскодировании требуется совместимость с GPU и проброс устройства в контейнер. Для таких задач стандартный VPS без GPU подходит только для лёгких операций, прямого воспроизведения или фоновой обработки без жёстких SLA.
Отдельный сервер или масштабирование
Когда одна БД стабильно потребляет более 40% RAM и более 30% дискового I/O, её лучше вынести на отдельный VPS или выделенный сервер. Это снижает риск, что обновление приложения, утечка памяти или внезапный всплеск HTTP-трафика повлияют на транзакции.
Выделенный сервер оправдан при 32–64 GB RAM, постоянной нагрузке на 8+ ядер, больших локальных данных и высоких требованиях к IOPS. Для CPU-инференса и тяжёлых вычислений сравнивайте модель VPS и bare metal по реальному профилю нагрузки: выбор между bare metal и VPS для ML inference зависит от продолжительности и параллельности задач.
Как проверить, сколько контейнеров потянет VPS
Измеряйте пик, а не потребление в простое
Проверка сервер под Docker требования начинается после развёртывания тестового стека. Запустите нагрузочный тест, импорт данных в БД, выполнение фоновых задач и резервное копирование одновременно или с минимальным интервалом. Именно такие сочетания чаще всего вызывают нехватку RAM и CPU.
# Текущая нагрузка контейнеров
docker stats --no-stream
# Использование диска Docker
docker system df -v
# RAM, swap и load average
free -h
uptime
# Задержки и загрузка диска
iostat -xz 1
Целевые значения для стабильного Docker-хоста: свободно 20–30% RAM или доступный файловый кэш, swap близок к 0, CPU в среднем ниже 70%, диск заполнен менее чем на 75%, а p95 ответа приложения не растёт при запуске backup-job. Если docker stats показывает 90% RAM только у одной БД, масштабировать нужно память, а не число контейнеров.
Минимальный набор мониторинга
Для 10+ сервисов установите node_exporter, cAdvisor, Prometheus и Grafana либо используйте внешний мониторинг. Следите за memory working set, рестартами контейнеров, 5xx-ошибками, свободным местом, inode и скоростью роста логов. Практический развёртывающий сценарий с Compose, SSL и бэкапами описан в материале Docker на VPS: от первого контейнера до production с бэкапами.
Настройте уведомление при 80% RAM, 75% диска, пяти рестартах контейнера за 10 минут и ошибках резервного копирования. Эти четыре алерта предотвращают большую часть аварий у self-hosted стеков.
Часто задаваемые вопросы
Ответы по ресурсам Docker VPS
Сколько RAM нужно для Docker-хоста с PostgreSQL? Для одного небольшого приложения, PostgreSQL и reverse proxy начинайте с 4 GB RAM и 2 vCPU. Если база хранит более 2–3 GB активных данных, работает Redis или есть несколько приложений, безопаснее выбрать 8 GB RAM. Оставляйте минимум 1 GB памяти ОС и файловому кэшу.
Сколько контейнеров можно запустить на VPS с 4 GB RAM? VPS с 4 GB RAM обычно выдерживает 5–10 лёгких контейнеров: proxy, приложение, бот, Redis с лимитом 256 MB и небольшую БД. Число снизится до 2–4, если есть Java, Elasticsearch, медиаобработка или PostgreSQL с большим кэшем. Лимиты памяти в Compose обязательны.
Нужны ли 4 vCPU для 15 Docker-контейнеров? Для 15 обычных web-контейнеров 4 vCPU — практичный ориентир, особенно при фоновых задачах и работе базы данных. Если сервисы большую часть времени простаивают, достаточно 2 vCPU, но время ответа ухудшится в пике. Для сборки образов, FFmpeg и CI лучше выделить 4–8 vCPU отдельно.
Какой диск выбрать для Docker и базы данных? Для Docker-хоста с PostgreSQL или MySQL выбирайте NVMe от 80 GB и сохраняйте 25–30% свободного пространства. На этом диске размещаются volumes, образы и логи. При объёме БД 50 GB разумно планировать не менее 160 GB NVMe с учётом индексов, временных файлов и обновлений.
Выводы
Практическая рекомендация
Для большинства self-hosted Docker-стеков из 10–20 сервисов выбирайте VPS с 4 vCPU, 8 GB RAM и 80 GB NVMe. Если в контейнерах работают PostgreSQL, Elasticsearch, Prometheus или медиасервис, закладывайте минимум 16 GB RAM и 30% резерва по CPU, диску и трафику.
NVMe VPS с активацией за 60 секунд: полный root-доступ, 20+ локаций, оплата картой или криптой.
Выбрать тариф