Docker Swarm — встроенный режим кластеризации Docker Engine. Он позволяет объединять несколько Docker-узлов и управлять контейнерными сервисами как кластером.
Swarm предназначен для задач, когда одного Docker-сервера становится недостаточно и требуется распределенное выполнение сервисов.
Что такое Swarm
Swarm состоит из узлов двух основных типов:
- manager;
- worker.
Manager отвечает за управление кластером и состоянием сервисов.
Worker выполняет задачи, назначенные кластером.
Архитектура
Упрощенно:
Manager
/ \
Worker Worker
| |
Service Service
В production рекомендуется использовать несколько manager-узлов для отказоустойчивости управления кластером.
Инициализация Swarm
На первом сервере:
docker swarm init
Docker выдаст команду, которую можно использовать для подключения worker-узлов.
Проверить:
docker node ls
Добавление worker
На другом сервере выполняется команда docker swarm join, которую предоставляет manager после docker swarm init.
После подключения:
docker node ls
покажет узлы кластера.
Docker service
Вместо обычного docker run в Swarm используется понятие service.
Например:
docker service create \
--name web \
--publish 80:80 \
nginx
Проверить:
docker service ls
Масштабирование
Можно запустить несколько реплик:
docker service scale web=3
Проверить:
docker service ps web
Swarm распределит задачи между подходящими узлами.
Rolling update
Swarm позволяет обновлять сервис постепенно.
Например:
docker service update \
--image nginx:alpine \
web
Это может быть удобнее, чем вручную останавливать все контейнеры.
Swarm и Docker Compose
Compose и Swarm связаны, но не являются одним и тем же инструментом.
Compose удобен для описания многоконтейнерного приложения, в том числе на одном сервере.
Swarm добавляет кластерное управление.
Docker указывает, что Compose-приложения можно использовать на Swarm-кластере для масштабирования.
Overlay networks
Для связи сервисов между несколькими Docker-узлами используются overlay networks.
Пример:
docker network create \
--driver overlay \
app-network
После этого сервисы могут взаимодействовать через распределенную сеть.
Swarm secrets
Swarm предоставляет механизм secrets для чувствительной информации.
Например:
printf "secret-value" | docker secret create db_password -
Список:
docker secret ls
Секреты можно подключать к сервисам.
Swarm configs
Для конфигурационных файлов используются configs.
Это позволяет отделять код контейнера от конфигурации.
Backup Swarm
Для восстановления Swarm особенно важно сохранить состояние manager-узлов.
Docker указывает каталог:
/var/lib/docker/swarm/
как место хранения swarm state. При backup также нужно учитывать unlock key, если включена auto-lock.
Когда Swarm подходит
Swarm может быть интересен, если:
- команда уже использует Docker;
- требуется относительно простой кластер;
- нужна встроенная оркестрация;
- не хочется вводить более сложную платформу;
- количество сервисов умеренное.
Когда Swarm может быть избыточен
Для одного VPS обычно достаточно:
Docker + Compose
Если инфраструктура большая и требуется широкий набор функций оркестрации, могут рассматриваться Kubernetes и другие платформы.
Swarm vs Compose
| Возможность | Compose | Swarm |
|---|---|---|
| Один сервер | Отлично | Можно |
| Несколько серверов | Ограниченно | Да |
| Масштабирование | Да, локально | Да |
| Оркестрация | Ограниченная | Да |
| Overlay network | В специальных сценариях | Да |
| Secrets | Да в определенных сценариях | Встроенный Swarm secrets |
| Сложность | Низкая | Выше |
Типичные ошибки
Использовать Swarm без необходимости
Для небольшого сайта он может только усложнить инфраструктуру.
Нет quorum manager-узлов
Потеря большинства manager-узлов может повлиять на управление кластером.
Нет backup
Состояние Swarm необходимо резервировать.
Не продумано хранение данных
Stateless-сервисы масштабировать проще, чем базы данных с локальными volumes.
Итог
Docker Swarm — способ превратить несколько Docker Engine в управляемый кластер.
Для небольшого проекта часто достаточно Docker Compose. Swarm имеет смысл рассматривать, когда появляется потребность в кластеризации, репликах, распределении сервисов и rolling updates.
Читайте также:



