Перейти к основному содержимому

Текущая система деплоя Docker-образами

·228 слов·2 минут
Оригинал опубликован в Telegram

Я уже рассказывал о нашей прошлой системе выкладки сервисов — с помощью debian-пакетов и даже написал лонгрид с подробностями.

Перед установкой debian-пакета необходимо настроить сервер. Но если двум разным пакетам понадобится разное окружение, то возникает проблема.

Нужно либо каким-то образом “поженить” конфликтующие окружения на одном сервере, либо ставить такие debian-пакеты на разные сервера.

Чаще всего один физический сервер разделяют на независимые части с помощью виртуализации для оптимизации использования мощностей. И на такие виртуальные сервера можно поставить конфликтующие debian-пакеты с сервисами.

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

Docker — де-факто стандарт контейнеризации. Docker-контейнеры используются повсеместно — и в Яндексе, в частности.

В отличие от debian-пакета в docker-контейнер включено необходимое окружение. Однажды настроенный docker-контейнер может быть запущен на любых серверах. Удобно обновлять и поддерживать.

Docker позволяет легко накатывать и откатывать новую версию приложения. И это с учетом изолированности среды выполнения и минимальным оверхедом по использованию ресурсов.

В моей команде docker используется не совсем по “канонам”. В одном docker-контейнере одновременно живет несколько процессов: nginx, приложение и дополнительные вспомогательные процессы.

По-хорошему, их нужно было разносить по отдельным docker-контейнерам с провязкой через docker-compose, но нам оказалось удобнее сделать общий базовый образ “все в одном”.

Docker-образ конкретного сервиса наследуется от базового образа и получает всю необходимую инфраструктуру “из коробки”. Такой подход позволяет нам унифицированно работать с 50+ сервисами и упрощает обновление инфраструктуры.