Серверы & ОС

Что такое Docker

Что это

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

Зачем это бизнесу

переезд на другой сервер — это часы, а не недели; одна программа не ломает другую на том же сервере; если что-то упало, контейнер перезапускается сам. Почти в каждом проекте: бот, база данных и сайт живут в отдельных контейнерах. Compose — это «опись» всех коробок проекта, чтобы запускать их одной командой, Swarm — способ разложить их по нескольким серверам.

Где Docker нужен бизнесу

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

Как мы это используем

Почти каждый проект студии запускается в контейнерах, а их состав описан в docker-compose.

  • Изоляция сайтов. На сервере сайтов у каждого сайта свой контейнер и своя docker-сеть, в ней только сайт и входной nginx. Базы данных подключены лишь к внутренним сетям своих проектов, поэтому взлом одного сайта не даёт дороги к базе соседа.
  • Магазин одним стеком. Интернет-магазин — четыре контейнера: база, кэш, API и витрина. Схема базы применяется миграциями при старте API.
  • Бот без открытых портов. Бот для полисов ОСАГО работает в контейнере только для чтения и без открытых портов: к Telegram он подключается сам.
  • Данные переживают пересборку. В боте дней рождений файл базы лежит на диске хоста, у контейнера лимит памяти 256 МБ и ротация логов.
  • Профили под задачу. В боте загрузки видео локальный Bot API для файлов до 2 ГБ включается отдельным профилем docker-compose.

Развёртывание в Docker входит в ботов, сайты и инфраструктуру.

Типичные проблемы

  • Данные внутри контейнера исчезают при пересборке. База и загруженные файлы должны лежать в томе на диске хоста.
  • Время по серверу, а не по Москве. Без явного TZ=Europe/Moscow напоминания, логи и «тихие часы» считаются по часовому поясу хостинга. Поэтому часовой пояс задаём в каждом контейнере.
  • Логи съедают диск. Размер логов Docker ограничиваем, у входного nginx своя ротация.
  • Сборка не помещается в память сервера. Образ сайта на Nuxt собираем на рабочей машине и загружаем готовым: на сервере для сборки мало памяти.
  • Контейнер работает, но сервис мёртв. Нужна проверка здоровья, а не только «процесс запущен»: в «Переговорке» сторож перезапускает залипший контейнер, но не чаще трёх раз в час.

Когда это не нужно

Статические страницы без сервера обходятся без Docker: инструкции по подключению VPN — это пять HTML-файлов на GitHub Pages, без сборки и без .env. Одному скрипту, который раз в день запускается на рабочем компьютере, контейнер тоже не нужен.

← Все термины

Нужен сайт, бот или автоматизация?

Термины объяснили — теперь давайте к делу: расскажите о задаче, а мы переведём её на понятный план работ.