Требования к VPS для Docker
Docker удобен тем, что весь проект — приложение, база, очередь, обратный прокси — описывается одним файлом compose.yaml и переезжает с сервера на сервер за минуты. Но к самому виртуальному серверу у него есть требования, которых нет у обычного сайта на PHP. В таблице выше уже оставлены тарифы, которые им удовлетворяют: KVM, от 2 ядер, 2 ГБ памяти и 30 ГБ на NVMe, а сначала идут те, где ядро дешевле.
Виртуализация: почему KVM
Контейнеры используют механизмы ядра Linux: пространства имён, cgroups, сетевые мосты, iptables. На KVM у VDS собственное ядро, и Docker ставится из официального репозитория без сюрпризов. На OpenVZ и LXC ядро общее с хост-машиной: Docker там либо не запускается совсем, либо работает только при специальных настройках хостера, с ограничениями по сети и старыми версиями. Тратить вечер на выяснение не стоит — сразу берите VPS на KVM.
Второй момент — драйвер хранилища. Docker по умолчанию использует overlay2, которому нужна поддержка OverlayFS в ядре. Если её нет, Docker откатывается на драйвер vfs, который копирует каждый слой образа целиком: диск заполняется в разы быстрее, сборки идут медленно. Проверить драйвер можно командой docker info сразу после установки.
Сколько памяти нужно под несколько контейнеров
Сам демон Docker занимает около 100 МБ. Дальше считайте по составу стека:
- Nginx или Caddy — 20–50 МБ;
- приложение на Python, Node.js или PHP-FPM — 100–300 МБ на процесс;
- PostgreSQL или MySQL — от 200 МБ, под нагрузкой заметно больше;
- Redis — десятки мегабайт плюс объём данных.
Типичный стек «прокси + приложение + база + Redis» укладывается в 1–1,5 ГБ, поэтому 2 ГБ — разумный минимум, а для нескольких проектов на одном сервере лучше 4 ГБ RAM. Задайте контейнерам лимиты памяти и добавьте swap-файл: без этого один разросшийся процесс уронит соседей через OOM killer.
Диск: место уходит незаметно
Образы весят от десятков мегабайт до гигабайта, и при каждом обновлении старые версии остаются на диске. Логи контейнеров по умолчанию пишутся без ограничения размера. Отсюда три правила: настройте ротацию логов в daemon.json (параметры max-size и max-file), периодически запускайте docker system prune и не берите меньше 30 ГБ. Если в контейнерах живут базы данных, обратите внимание на тарифы на NVMe — для случайных операций записи разница с SATA SSD ощутима.
Сеть, безопасность и оплата
Частая ловушка: опубликованные через -p порты Docker открывает в обход UFW, правила файрвола на них не действуют. Привязывайте служебные сервисы к 127.0.0.1 или используйте внутренние сети compose. С российских серверов скачивание образов с Docker Hub временами бывает затруднено, поэтому заранее настройте зеркало реестра. Способы оплаты для каждого тарифа — в колонке «Оплата», цены приведены в рублях и обновляются по данным с сайтов хостеров.