Перейти до вмісту

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

Який сервер потрібен для 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 достатньо для стеку, що живе на одному сервері, і це правильна відповідь для переважної більшості самостійно розміщених систем: завдання оркестратора полягає в розподілі між машинами, а з однією машиною розподіляти нічого. Беріться за Kubernetes, коли у вас справді є кілька машин і причина для такої складності, не раніше.
Що закінчиться першим: пам’ять, ЦП чи диск?
Зазвичай пам’ять, і закінчується вона гучно: механізм ядра out-of-memory killer обирає процес і завершує його, а це виглядає так, ніби контейнер загадково перезапускається. Задайте обмеження пам’яті для кожного контейнера, щоб завершувався той, що поводиться неправильно, а не ваша база даних. Другий сюрприз: диск. Образи, томи й журнали непомітно накопичуються, тому `docker system prune` варто додати до щотижневого cron задовго до того, як це стане терміновим.
Який образ має запускати хост?
Будь-який із наших: усі тарифи підтримують усі образи, і Docker працює на кожному з них. Якщо у вас немає власних уподобань, варто взяти Ubuntu LTS, яка є типовим вибором, просто тому, що більшість документації щодо контейнерів розрахована саме на неї. Дистрибутив важить значно менше, ніж здається: контейнери приносять власне користувацьке середовище, тож хост є лише ядром і демоном.