Docker на VPS: зачем контейнеры бизнесу, а не только программистам
Docker — это инструмент, который упаковывает сайт вместе со всем, что ему нужно для работы, в стандартную «коробку» — контейнер. Такая коробка одинаково запускается на ноутбуке разработчика и на боевом сервере, поэтому сайт проще переносить, обновлять и передавать другому подрядчику. Запускают контейнеры на VPS: на обычном виртуальном хостинге это невозможно. Ниже — как это устроено, что получает заказчик, сколько стоит, когда Docker не нужен и о чём спросить разработчика.
Типичная ситуация: разработчик говорит «нам нужен VPS, будем разворачивать в Docker». Заказчик кивает и идёт гуглить, что это и не пытаются ли его обмануть. Не пытаются. Но и понимать, за что вы платите, полезно — тем более что контейнеры действительно решают несколько бизнес-проблем.
Что такое Docker и контейнер простыми словами
Любой сайт — это не только его код. Ему нужна конкретная версия PHP или Node.js, определённые библиотеки, база данных, настройки веб-сервера. Всё это ставится на сервер, и со временем сервер превращается в уникальный организм: никто уже не помнит, что на нём стоит и почему.
Контейнер — это коробка, в которую упакован сайт вместе со всем, что ему нужно. Коробка одинаково запускается на ноутбуке разработчика, на тестовом сервере и на боевом VPS. Docker — самый распространённый инструмент для создания таких коробок.
Аналогия — морские контейнеры. До них каждый груз грузили по-своему, и порт под каждый товар перестраивали. Со стандартным контейнером всё равно, что внутри: кран один, корабль один, правила одни.
В разговоре с разработчиком вы услышите несколько слов. Знать их наизусть не нужно, достаточно понимать смысл.
| Термин | Что это простыми словами |
|---|---|
| Образ | Шаблон коробки: записанный набор программ и настроек, из которого запускают контейнеры |
| Контейнер | Запущенная коробка — работающая программа: веб-сервер, база данных, обработчик очередей |
| Dockerfile | Текстовый рецепт, по которому собирается образ |
| Docker Compose | Файл с описанием всей системы: какие контейнеры нужны сайту и как они связаны |
| Том (volume) | Папка с данными вне контейнера: база, загруженные файлы. Контейнер можно удалить, данные останутся |
| Реестр образов | Хранилище готовых образов, откуда сервер скачивает нужную версию |
Чем Docker отличается от обычной установки на сервер
При обычной установке все программы ставятся прямо в систему сервера и делят её между собой. В Docker каждая часть сайта живёт в своей коробке, а как эти коробки собрать и запустить, записано в файлах проекта.
| Вопрос | Обычная установка | Docker |
|---|---|---|
| Где описано окружение | В голове администратора и в истории команд | В файлах проекта, которые хранятся вместе с кодом |
| Переезд на другой сервер | Настройка заново, с сюрпризами | Скопировать проект и данные, запустить |
| Два проекта с разными версиями PHP | Возможны конфликты | Каждый в своём контейнере, друг другу не мешают |
| Откат неудачного обновления | Вручную, не всегда возможен | Запуск предыдущей версии образа |
| Порог входа | Ниже: привычно большинству администраторов | Выше: нужен разработчик, знакомый с Docker |
| Панель управления хостингом | Работает привычно | Обычно не используется, управление через консоль |
От виртуальной машины контейнер отличается тем, что не несёт внутри собственную операционную систему целиком. Поэтому он запускается за секунды и почти не расходует ресурсы сверх того, что нужно самим программам. Сам VPS — это как раз виртуальная машина, а контейнеры работают внутри него. Если вы только знакомитесь с серверами, начните со статьи VPS для начинающих.
Что Docker даёт заказчику
- Переезд без боли. Сайт в контейнерах переносится на другой сервер за час: скопировать, запустить. Без контейнеров переезд «сервера с историей» — это дни и сюрпризы.
- Одинаковое поведение. «У меня на компьютере работало» перестаёт быть отговоркой: у разработчика та же коробка, что и на сервере.
- Изоляция. Несколько сайтов или сервисов на одном VPS не мешают друг другу. Обновили PHP для одного — второй не заметил.
- Быстрый откат. Новая версия сломалась — вернули предыдущую коробку за минуту.
- Смена подрядчика. Новый разработчик получает описанное окружение, а не сервер-загадку.
- Тестовая копия за минуты. Из тех же файлов поднимается точная копия сайта для проверки доработок. Зачем она нужна, мы писали в статье про тестовую копию сайта.
Пункт про смену подрядчика мы ценим больше всего. К нам регулярно приходят проекты «от предыдущей студии», и разница между сервером с Docker и без него — это разница между днём и неделей на то, чтобы просто запустить сайт у себя и понять, как он устроен.
Сколько стоит Docker на VPS
Docker сам по себе бесплатен. Платите вы за VPS, потому что на виртуальном хостинге контейнеры не запустить: нужен свой сервер с полным доступом. Минимальная конфигурация под небольшой сайт в контейнерах — 2 ядра и 2–4 ГБ памяти. Контейнеры добавляют немного накладных расходов, но на практике их не замечаешь. Как посчитать ресурсы под свой проект, описано в статье о том, как выбрать конфигурацию VPS.
Ещё платите временем разработчика на первичную настройку — обычно это несколько часов. Дальше поддержка такого сервера дешевле, а не дороже: всё описано в файлах, а не в голове одного человека.
Два момента, которые стоит учесть заранее. Диск: образы и журналы контейнеров занимают место, поэтому тариф с диском «впритык» не подойдёт. И тип сервера: Docker нужен VPS с полноценной виртуализацией — у большинства современных провайдеров это так, но при заказе лучше уточнить, что тариф поддерживает запуск контейнеров.
Когда Docker нужен, а когда нет
Честный ответ: типовому сайту на WordPress или лендингу на виртуальном хостинге контейнеры не нужны. Там всё уже настроено хостером, а от Docker будет только усложнение.
| Ситуация | Нужен ли Docker | Почему |
|---|---|---|
| Визитка или блог на WordPress, виртуальный хостинг | Нет | Окружение уже настроено хостером |
| Лендинг на конструкторе | Нет | Сервер вам вообще не нужен |
| Сайт на фреймворке: Laravel, Django, Node.js | Да | Требует своего окружения и конкретных версий |
| Несколько разных проектов на одном VPS | Да | Изоляция избавляет от конфликтов версий |
| Есть очереди, фоновые задачи, отдельный поиск, несколько баз | Да | Это уже не один процесс, а система из частей |
| Частые обновления, важен быстрый откат | Да | Версии образов позволяют вернуться назад за минуту |
| Один типовой сайт на VPS с панелью управления | Скорее нет | Панель решает те же задачи привычным способом |
Отдельный мотив — независимость. Если вы хотите не зависеть от конкретного хостера или разработчика, описанное в файлах окружение страхует лучше любых устных договорённостей.
Как выглядит запуск сайта в Docker на VPS
Настраивать это самому владельцу бизнеса не нужно, но полезно представлять последовательность — чтобы понимать, что делает разработчик и за что он берёт деньги.
- Арендуется VPS с чистой операционной системой, обычно Linux, и проводится базовая защита: вход по ключам, файрвол, обновления. Минимальный набор описан в статье про первые настройки безопасности VPS.
- На сервер устанавливается Docker.
- В проекте готовятся файлы описания: из каких контейнеров состоит сайт, какие порты открыты, где лежат данные.
- Данные — база и загруженные файлы — выносятся в тома, чтобы они не зависели от жизни контейнеров.
- Проект запускается одной командой:
docker compose up -d. Проверить, что всё работает, можно командойdocker ps— она показывает список запущенных контейнеров. - Настраиваются домен, SSL-сертификат и автозапуск контейнеров после перезагрузки сервера.
- Настраиваются резервные копии данных и порядок обновления: как выкатывается новая версия и как откатывается старая.
Ещё две команды, которые пригодятся, если вы заглядываете на сервер сами: docker stats показывает, сколько процессора и памяти расходует каждый контейнер, а docker system df — сколько места на диске занимают образы и данные.
Где хранятся данные и что с бэкапами
Контейнеры одноразовые: их спокойно удаляют и создают заново при каждом обновлении. Всё, что записано внутри контейнера, при этом исчезает. Поэтому база данных и загруженные файлы должны жить в томах — папках на сервере, подключённых к контейнеру снаружи.
Из этого следует правило для резервных копий: копировать нужно не контейнеры, а данные в томах и файлы описания проекта. Имея их, сайт можно поднять на любом новом сервере. Чем снимок сервера отличается от полноценной копии и почему нужны оба, мы разобрали в статье про снапшоты и бэкапы VPS.
О чём спросить разработчика
Если вам предлагают Docker, задайте несколько вопросов. Внятные ответы означают, что вам ставят рабочую систему, а не модное слово.
- Где хранится описание окружения и есть ли оно в репозитории проекта.
- Как делаются бэкапы данных: база и загруженные файлы должны жить отдельно от контейнеров и копироваться.
- Как обновлять сервер: кто и когда обновляет сами образы, чтобы в них не копились уязвимости.
- Поднимутся ли контейнеры сами после перезагрузки сервера.
- Как откатить неудачное обновление и сколько времени это займёт.
- У кого будут доступы к серверу и репозиторию и получит ли их владелец бизнеса.
Последний вопрос касается не только Docker: сервер, код и домен должны быть оформлены на вас. Какие доступы стоит держать у себя, перечислено в статье о том, кому принадлежит ваш сайт.
Частые ошибки при работе с Docker
- Хранят данные внутри контейнера. Первое же обновление с пересозданием контейнера стирает базу или загруженные файлы.
- Открывают базу данных наружу. Порт базы, опубликованный для всего интернета, — подарок взломщикам. Docker сам управляет сетевыми правилами, и привычный файрвол опубликованный порт может не закрыть. Базе достаточно внутренней сети между контейнерами.
- Не ограничивают журналы. Контейнеры пишут логи на диск, и без ограничения размера они за месяцы съедают всё место. Сайт падает «без причины».
- Не чистят старые образы. После каждого обновления остаётся предыдущая версия. Раз в какое-то время неиспользуемое нужно удалять.
- Годами не обновляют образы. Внутри коробки те же программы, что и на обычном сервере, и уязвимости в них появляются так же.
- Кладут пароли в файлы проекта. Ключи и пароли хранят отдельно от кода, иначе они утекают вместе с репозиторием.
- Берут Docker ради Docker. Для одной визитки это лишний слой, который придётся кому-то поддерживать.
Коротко
Docker упаковывает сайт и его окружение в контейнеры, описанные в файлах проекта. Заказчику это даёт простой переезд, быстрый откат, изоляцию проектов и независимость от одного разработчика. Нужен он проектам на фреймворках и системам из нескольких частей; типовому сайту на виртуальном хостинге — нет. Главное при работе с контейнерами — данные в томах, бэкапы вне сервера и понятная процедура обновления.
Мы в CasperLab разворачиваем проекты на фреймворках именно так — с описанным окружением, бэкапами вне контейнеров и понятной процедурой обновления. И подбираем VPS под реальную нагрузку, а не «с запасом на всякий случай».
Арендовать VPS в CasperLab
Поможем подобрать решение под вашу задачу и рассчитаем стоимость без обязательств.
Арендовать VPS