Перейти к содержимому

Решения · Контейнеры

Какой сервер нужен для Docker?

Контейнеры: это процессы, разделяющие одно ядро, а не маленькие виртуальные машины. Демон занимает около 100 MB, а всё остальное: просто ваши собственные процессы. Поэтому ответ скромнее, чем ожидает вопрос: прокси, приложение, база данных и кэш вместе занимают примерно 515 MB и с запасом помещаются на BD-8 за $12.90.

Сколько на самом деле занимает контейнер

Диапазоны, а не бенчмарки

Ваш образ, конфигурация и трафик влияют на эти цифры сильнее, чем может учесть любая таблица. Запустите docker stats на своём стеке: только это число относится к вам.

Типичная резидентная память для распространённых контейнерных нагрузок
КонтейнерТипичная памятьПомещается на BD-8 (8 GB)
Обратный проксиnginx, Caddy, Traefik15–60 MB129 в верхней границе
Небольшое веб-приложениеNode, Python, Go: один процесс60–200 MB38 в верхней границе
PostgreSQL или MySQLнебольшой набор данных, пул по умолчанию200–500 MB15 в верхней границе
Redisкак кеш, ограниченный maxmemory20–200 MB38 в верхней границе
Сервис на JVMJava, Kotlin, Elasticsearch500–2000 MB3 в верхней границе

Арифметика

Что вмещает каждый тариф

Память за вычетом 300 MB на операционную систему и 100 MB на демон, делённая на то, сколько занимают ваши контейнеры. Средний столбец: целый стек (прокси, приложение, база данных, кэш) примерно на 515 MB.

Ёмкость по контейнерам и стекам для каждого тарифа, с диском и актуальными ценами
ТарифRAMЦелые стекиНебольшие приложенияДискЦенаРазвернуть
VPS-11 GB1325 GB$9.90Развернуть
BD-88 GB1538100 GB$12.90Развернуть
BD-1212 GB2359200 GB$17.90Развернуть
BD-2424 GB46120300 GB$31.90Развернуть

Второй сюрприз, с которым сталкиваются позже, это диск: образы, тома и логи незаметно накапливаются. Добавьте docker system prune в еженедельный cron заранее, а не когда это станет срочно.

Против самих себя

Когда это покупать не стоит

Управляемая контейнерная платформа стоит дороже, потому что берёт эксплуатацию на себя. За это действительно стоит платить.

VPS даёт вам root и передаёт вам обновления, перезапуски, сертификаты и ночные вызовы. Это намного дешевле и действительно требует больше работы. Если вы не хотите этим заниматься, честный ответ: управляемая платформа, и мы лучше порекомендуем её, чем продадим машину, которую в итоге забросят с непропатченным демоном, открытым в интернет. Ещё два небольших совета в том же духе: задайте ограничение памяти каждому контейнеру, чтобы при сбое погибал он, а не ваша база данных, и не беритесь за Kubernetes на одной машине: оркестратор, которому нечего распределять, это лишь лишняя сложность.

Вопросы

Что спрашивают перед покупкой.

Сколько RAM потребляет сам Docker?
Совсем немного, и именно это удивляет людей. Демон Docker занимает примерно 100 MB, а каждый контейнер после этого: просто процесс. Нет второй операционной системы, нет второго ядра, нет фиксированных затрат на каждый контейнер, как у виртуальной машины. Поэтому арифметика простая: память вашей машины минус около 300 MB на операционную систему и 100 MB на демон, разделённая между процессами, которые вы реально запускаете.
Сколько контейнеров выдержит небольшой VPS?
Больше, чем подразумевает вопрос, потому что «контейнер» не единица размера. Десять обратных прокси и один Elasticsearch требуют совершенно разных машин. На BD-8 (8 GB за $12.90) прокси, веб-приложение, база данных и кэш вместе занимают примерно 515 MB, так что большая часть машины остаётся свободной. Таблица выше выполняет деление; запустите `docker stats` на своём стеке, чтобы получить число, которое действительно относится к вам.
VPS дешевле управляемой контейнерной платформы?
Почти всегда дешевле, но цена не исчерпывает сравнение. Платформа берёт больше, потому что занимается эксплуатацией: обновления, перезапуски, сертификаты, вызов дежурного в 3 часа ночи. VPS даёт вам root и возвращает всё это вам. Если вы хотите запускать контейнеры и готовы взять эту работу на себя, VPS обойдётся намного дешевле. Если нет, платите платформе: мы лучше скажем это прямо, чем продадим вам машину, которую в итоге бросят с непропатченным демоном.
Нужен ли мне Docker Swarm или Kubernetes?
На одной машине нет. Compose достаточно для стека, который живёт на одном сервере, и это правильный ответ для подавляющего большинства self-hosted установок: задача оркестратора: распределение нагрузки между машинами, а на одной машине распределять нечего. Беритесь за Kubernetes, когда у вас действительно несколько машин и есть причина для такой сложности, но не раньше.
Что кончается первым: память, ЦП или диск?
Обычно память, и заканчивается она громко: OOM killer ядра выбирает процесс и завершает его, что выглядит как загадочный перезапуск контейнера. Задайте ограничения памяти для каждого контейнера, чтобы погибал тот, который ведёт себя неправильно, а не ваша база данных. Второй сюрприз: диск. Образы, тома и логи тихо накапливаются, поэтому `docker system prune` стоит добавить в еженедельный cron задолго до того, как это станет срочным.
Какой образ ставить на хост?
Любой из наших: каждый тариф поддерживает каждый образ, и Docker работает на всех. Если у вас нет предпочтений, берите Ubuntu LTS по умолчанию, просто потому что большая часть документации по контейнерам рассчитана на неё. Дистрибутив значит гораздо меньше, чем кажется: контейнеры приносят собственное пользовательское окружение, так что хост сводится почти к ядру и демону.