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

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

Настраивать это самому владельцу бизнеса не нужно, но полезно представлять последовательность — чтобы понимать, что делает разработчик и за что он берёт деньги.

  1. Арендуется VPS с чистой операционной системой, обычно Linux, и проводится базовая защита: вход по ключам, файрвол, обновления. Минимальный набор описан в статье про первые настройки безопасности VPS.
  2. На сервер устанавливается Docker.
  3. В проекте готовятся файлы описания: из каких контейнеров состоит сайт, какие порты открыты, где лежат данные.
  4. Данные — база и загруженные файлы — выносятся в тома, чтобы они не зависели от жизни контейнеров.
  5. Проект запускается одной командой: docker compose up -d. Проверить, что всё работает, можно командой docker ps — она показывает список запущенных контейнеров.
  6. Настраиваются домен, SSL-сертификат и автозапуск контейнеров после перезагрузки сервера.
  7. Настраиваются резервные копии данных и порядок обновления: как выкатывается новая версия и как откатывается старая.

Ещё две команды, которые пригодятся, если вы заглядываете на сервер сами: docker stats показывает, сколько процессора и памяти расходует каждый контейнер, а docker system df — сколько места на диске занимают образы и данные.

Где хранятся данные и что с бэкапами

Контейнеры одноразовые: их спокойно удаляют и создают заново при каждом обновлении. Всё, что записано внутри контейнера, при этом исчезает. Поэтому база данных и загруженные файлы должны жить в томах — папках на сервере, подключённых к контейнеру снаружи.

Из этого следует правило для резервных копий: копировать нужно не контейнеры, а данные в томах и файлы описания проекта. Имея их, сайт можно поднять на любом новом сервере. Чем снимок сервера отличается от полноценной копии и почему нужны оба, мы разобрали в статье про снапшоты и бэкапы VPS.

О чём спросить разработчика

Если вам предлагают Docker, задайте несколько вопросов. Внятные ответы означают, что вам ставят рабочую систему, а не модное слово.

  • Где хранится описание окружения и есть ли оно в репозитории проекта.
  • Как делаются бэкапы данных: база и загруженные файлы должны жить отдельно от контейнеров и копироваться.
  • Как обновлять сервер: кто и когда обновляет сами образы, чтобы в них не копились уязвимости.
  • Поднимутся ли контейнеры сами после перезагрузки сервера.
  • Как откатить неудачное обновление и сколько времени это займёт.
  • У кого будут доступы к серверу и репозиторию и получит ли их владелец бизнеса.

Последний вопрос касается не только Docker: сервер, код и домен должны быть оформлены на вас. Какие доступы стоит держать у себя, перечислено в статье о том, кому принадлежит ваш сайт.

Частые ошибки при работе с Docker

  • Хранят данные внутри контейнера. Первое же обновление с пересозданием контейнера стирает базу или загруженные файлы.
  • Открывают базу данных наружу. Порт базы, опубликованный для всего интернета, — подарок взломщикам. Docker сам управляет сетевыми правилами, и привычный файрвол опубликованный порт может не закрыть. Базе достаточно внутренней сети между контейнерами.
  • Не ограничивают журналы. Контейнеры пишут логи на диск, и без ограничения размера они за месяцы съедают всё место. Сайт падает «без причины».
  • Не чистят старые образы. После каждого обновления остаётся предыдущая версия. Раз в какое-то время неиспользуемое нужно удалять.
  • Годами не обновляют образы. Внутри коробки те же программы, что и на обычном сервере, и уязвимости в них появляются так же.
  • Кладут пароли в файлы проекта. Ключи и пароли хранят отдельно от кода, иначе они утекают вместе с репозиторием.
  • Берут Docker ради Docker. Для одной визитки это лишний слой, который придётся кому-то поддерживать.

Коротко

Docker упаковывает сайт и его окружение в контейнеры, описанные в файлах проекта. Заказчику это даёт простой переезд, быстрый откат, изоляцию проектов и независимость от одного разработчика. Нужен он проектам на фреймворках и системам из нескольких частей; типовому сайту на виртуальном хостинге — нет. Главное при работе с контейнерами — данные в томах, бэкапы вне сервера и понятная процедура обновления.

Мы в CasperLab разворачиваем проекты на фреймворках именно так — с описанным окружением, бэкапами вне контейнеров и понятной процедурой обновления. И подбираем VPS под реальную нагрузку, а не «с запасом на всякий случай».

Арендовать VPS в CasperLab

Поможем подобрать решение под вашу задачу и рассчитаем стоимость без обязательств.

Арендовать VPS
Поделиться:
Docker — это хостинг?
Нет, это инструмент для упаковки и запуска приложений. Ему нужен сервер — обычно VPS с полным доступом. На виртуальном хостинге Docker запустить нельзя.
Нужен ли Docker для сайта на WordPress?
Как правило, нет. WordPress отлично работает на обычном виртуальном хостинге, где окружение уже настроено. Контейнеры оправданы для проектов на фреймворках, нескольких сервисов на одном сервере или при частых обновлениях.
Сколько ресурсов VPS нужно под Docker?
Для небольшого сайта в контейнерах — от 2 ядер и 2–4 ГБ памяти. Сами контейнеры почти не добавляют нагрузки, ресурсы нужны тому, что внутри них: PHP, базе данных, очередям.
Чем Docker отличается от виртуальной машины?
Виртуальная машина содержит целую операционную систему и занимает гигабайты, а запускается минутами. Контейнер использует ядро системы сервера и включает только нужные приложению программы, поэтому стартует за секунды и расходует меньше ресурсов. На практике их совмещают: контейнеры запускают внутри VPS.
Что такое Docker Compose?
Это способ описать в одном файле всю систему сайта: веб-сервер, обработчик кода, базу данных, очереди и связи между ними. По этому файлу весь набор контейнеров запускается одной командой. Для владельца это означает, что устройство сервера записано и воспроизводимо.
Безопасен ли Docker для сайта компании?
Сам по себе он не делает сайт ни безопаснее, ни опаснее — многое зависит от настройки. Нужно не открывать наружу служебные порты, регулярно обновлять образы и хранить пароли отдельно от кода. Базовая защита самого VPS остаётся обязательной.