ООО «Ивент Хаб» · Москва · работаем по всей России
Пн—Пт, 10:00—19:00hello@gusi-lebedi.comРеквизиты
Практическое руководство

Docker: что это и зачем контейнеры нужны веб-проекту

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

Перенос контейнеров приложения из сборки в серверное окружение

Сайт работает у разработчика, но после переноса на сервер не видит нужную библиотеку. Другой специалист подключается к проекту и тратит день на настройку окружения. Docker помогает описать и упаковать среду приложения, чтобы меньше зависеть от ручной установки компонентов. Однако база заказов, пароли и работоспособность формы не появляются в этой упаковке автоматически.

В Гуси-Лебеди предлагаем разбирать контейнеризацию через простой вопрос: сможет ли следующий специалист запустить, обновить и восстановить ваш проект по понятной инструкции? Ниже объясняем основные понятия и показываем, что нужно согласовать до переноса сайта в контейнеры.

Образ, контейнер и виртуальная машина: что именно запускается

Образ приложения и отдельные контейнеры с рабочими процессами

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

Представьте интернет-магазин. Код приложения и его зависимости входят в образ, а запущенный контейнер обрабатывает запросы посетителей. Сведения о заказах и загруженные фотографии нужно хранить отдельно от заменяемого контейнера. Иначе удобное обновление приложения может обернуться потерей рабочих данных.

ПонятиеЗа что отвечаетЧто проверить в проекте
Docker image, образПодготовленные файлы приложения и инструкция запускаКакому выпуску кода соответствует образ
Docker container, контейнерЗапущенный или остановленный экземпляр на основе образаКакие настройки и хранилища подключены именно к нему
Registry, реестр образовХранение и получение образовКто имеет доступ к загрузке и скачиванию
Volume, томХранение данных вне записываемого слоя контейнераЧто хранится в томе и как это восстанавливается

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

Docker Desktop и Docker Engine тоже не синонимы. Desktop является приложением для работы с контейнерами на компьютере и включает несколько инструментов. Engine обеспечивает сборку и выполнение контейнеров. Docker Hub является реестром образов. Когда подрядчик говорит «установим Docker», уточните, о каком компоненте и какой машине идёт речь.

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

Вместо вопроса «Docker нужен любому сайту?» лучше выяснить, какие трудности он снимет у вас. Повторяемая подготовка среды, несколько связанных сервисов и передача проекта между специалистами являются понятными основаниями для обсуждения. Добавлять новый способ эксплуатации только ради названия технологии не стоит: его тоже придётся поддерживать.

Dockerfile и Docker Compose: сначала сборка, затем запуск проекта

Сборка компонентов приложения и связанный запуск сервисов

Эти файлы часто упоминают рядом, но они отвечают на разные вопросы. Dockerfile описывает сборку образа: какую основу использовать, какие файлы добавить, какие действия выполнить. Compose описывает приложение при запуске: его сервисы, сети, подключённые хранилища и другие параметры. Один файл не заменяет другой.

Для условного магазина это можно представить так: Dockerfile готовит образ приложения, а файл compose.yaml описывает его запуск вместе с нужными сервисами. База может находиться в отдельном контейнере или за пределами этой схемы. Необязательно переносить в контейнеры всё одновременно.

В официальном описании Compose используются понятия services, networks и volumes. По ним удобно проверять, полон ли переданный комплект: описание только приложения ещё не объясняет, как оно соединяется с базой и где сохраняет файлы.

Ниже приведены команды для просмотра состояния уже настроенного проекта. Выполнять их нужно в каталоге с его Compose-файлом; Docker и доступ к движку должны быть настроены заранее.

docker compose ps
docker compose logs --tail 50

Первая команда показывает состояние сервисов. Вторая выводит последние 50 строк журнала каждого контейнера. Команды приведены как пример, а не как результат проверки вашего сайта. Перед передачей журналов другому человеку проверьте, нет ли в них персональных данных, токенов и паролей.

Сам запуск обычно выполняют через docker compose up, но «контейнер запущен» и «сайт исправен» являются разными результатами. Приложение может работать как процесс и при этом не подключаться к базе или возвращать ошибку на странице оформления заказа. Нужна проверка пользовательского действия, а не только статуса контейнера.

В передаваемом проекте должны быть понятны три связи: версия исходного кода, собранный образ и реально развёрнутый выпуск. Историю кода ведут в системе контроля версий Git, а образ используется для запуска. Хранить исходники только внутри контейнера неудобно для дальнейшей разработки и проверки изменений.

При обсуждении разработки веб-сервиса полезно сразу добавить в требования способ сборки и передачи окружения. Тогда к моменту запуска будет ясно, какие файлы получает заказчик, где лежат образы и кто может выпустить обновление.

Контейнер можно заменить. Заказы и файлы должны остаться

Постоянное хранилище сохраняет данные при замене контейнера

Здесь проходит самая важная граница. Записываемый слой контейнера не предназначен для единственного хранения ценных данных. При удалении контейнера этот слой удаляется вместе с ним. Том имеет отдельный жизненный цикл и позволяет сохранить данные при замене контейнера. Эти особенности описаны в документации Docker о томах.

Для рабочих данных явно укажите именованный том или другое постоянное хранилище в конфигурации проекта. Анонимный том, созданный при запуске с --rm, может удалиться вместе с контейнером. Поэтому перед обновлением проверяйте тип хранилища и параметры запуска, а не только наличие тома.

Остановка контейнера не равна его удалению. А сохранение данных в томе не равно резервному копированию. Если ошибочно удалить записи в базе, том может сохранить именно это ошибочное состояние. Нужна отдельная копия и понятный способ восстановления.

Разберём учебный сценарий: приложение принимает заказ и сохраняет его в базе. После обновления приложения новый контейнер должен подключиться к нужной базе, а заказ должен остаться доступным. Фотографии товаров также должны находиться в предусмотренном постоянном хранилище. Это может быть том, подключённый каталог или внешнее хранилище: выбор зависит от устройства проекта.

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

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

Не начинайте освобождение места с случайной команды очистки из интернета. Сначала установите, какие контейнеры, образы и тома относятся к рабочему проекту, что можно удалить и где находится проверенная копия. Полезный критерий готовности: ответственный специалист может объяснить судьбу каждого постоянного хранилища после обновления.

Как принять запуск в Docker и передать сайт в поддержку

Проверка пользовательской формы, состояния контейнеров и резервирования

Просить только скриншот со списком работающих контейнеров недостаточно. Приёмка должна показывать, что приложение выполняет свою задачу и что его можно обслуживать после ухода разработчика.

Проведите короткую проверку на тестовом окружении с заранее согласованными данными:

  1. Откройте сайт и выполните основное действие: отправьте тестовую форму или оформите тестовый заказ.
  2. Проверьте результат там, где он должен появиться: в базе, панели управления или согласованной системе обработки обращений.
  3. Обновите приложение по подготовленной инструкции и повторите действие. Проверьте сохранность предыдущих тестовых данных и загрузок.
  4. Выполните согласованный сценарий восстановления из копии на тестовой среде. Сверьте восстановленные данные, а не только сообщение об успешном завершении команды.
  5. Зафиксируйте, кто принимает уведомления об ошибках и кто имеет доступ для восстановления.

Это пример программы приёмки. Для конкретного сайта её нужно дополнить интеграциями и действиями, важными для бизнеса. Проверка платежей, например, требует согласованного тестового сценария платёжной системы.

Передача должна содержать не только Dockerfile и Compose-файл. Нужны инструкция запуска, адрес реестра образов, соответствие выпусков версиям кода, описание хранения данных, порядок резервирования и восстановления. Отдельно определите способ передачи секретов и владельцев доступов. Пароль, вписанный в общедоступный репозиторий ради быстрого запуска, не становится защищённым благодаря контейнеру.

Если возникают ошибки, начните с конкретного симптома. Не открывается сайт: проверяйте путь запроса до приложения. Контейнер завершает работу: изучайте его состояние и журнал. Форма открывается, но обращение не поступает: проверяйте обработчик и интеграцию. Причину нельзя определить только по наличию слова Docker в архитектуре.

При выборе технического сопровождения сайта согласуйте ответственность за образы, сервер, базу, резервные копии и внешние сервисы. Такой список помогает избежать ситуации, когда приложение обслуживает одна команда, а восстановить его данные некому.

В Гуси-Лебеди считаем полезным результатом понятную эксплуатацию: известно, какой выпуск работает, где находятся данные и как проверить восстановление. Если после контейнеризации эти вопросы остались без ответа, работа по передаче проекта ещё не закончена.

Начать проект

Обсудим вашу задачу

Ответим в течение рабочего дня. Можно без технического задания — достаточно цели и вводных.

Заполнить короткий бриф ↗
Навигация по экспертизе

Ещё направления для вашего проекта

Все 86 услуг →