Docker Swarm — нативный оркестратор кластеров для Docker, встроенный в Docker Engine. Объединяет несколько Docker-хостов в единый кластер (Swarm), распределяет контейнеры по нодам, обеспечивает балансировку нагрузки и отказоустойчивость. В отличие от Kubernetes, Swarm значительно проще в настройке — кластер из 5 нод поднимается за 10 минут.
Архитектура Swarm
Кластер состоит из manager-нод и worker-нод. Managers хранят состояние кластера (через Raft consensus), планируют размещение сервисов, обрабатывают Swarm API. Workers выполняют контейнеры. Рекомендуемое число managers: 3 или 5 (нечётное для кворума Raft).
# Инициализировать Swarm
docker swarm init --advertise-addr 192.168.1.10
# Добавить воркер-ноду (команда из вывода init)
docker swarm join --token SWMTKN-1-xxx 192.168.1.10:2377
# Создать сервис (5 реплик nginx)
docker service create --name web --replicas 5 --publish 80:80 nginx
# Обновить количество реплик
docker service scale web=10
# Список сервисов
docker service ls
Docker Stack
Docker Stack — деплой многосервисных приложений в Swarm через Docker Compose-файл. Тот же docker-compose.yml используется и для локальной разработки, и для Swarm-деплоя:
docker stack deploy -c docker-compose.yml myapp
docker stack ls
docker stack services myapp
История
Docker Swarm v1 запущен в декабре 2014 года как отдельный проект. В Docker 1.12 (июль 2016) Swarm mode интегрирован непосредственно в Docker Engine — это «Swarm mode» (не путать со старым standalone Swarm). Docker Inc. конкурировала с Kubernetes, Mesos, Nomad. После того как в 2017–2018 годах Kubernetes занял доминирующее положение, Docker Swarm перестал активно развиваться. В 2022 году Mirantis (владелец Docker Engine) объявил о продолжении поддержки Swarm mode.
Docker Swarm vs Kubernetes
| Параметр | Docker Swarm | Kubernetes |
|---|---|---|
| Сложность настройки | Низкая (минуты) | Высокая (часы/дни) |
| Экосистема | Базовая | Огромная |
| Масштаб | До 1 000 нод | 5 000+ нод |
| Auto-scaling | Нет | HPA, VPA |
| Поддержка | Снижается | Активная |
На что обращать внимание
Docker Swarm — хороший выбор для малых и средних проектов (3–10 нод) с ограниченным DevOps-ресурсом: он значительно проще Kubernetes. Для продакшна рекомендуется 3 manager-ноды с VPS от 2 ГБ RAM. Traefik — популярный load balancer для Swarm с автоматическим SSL через Let's Encrypt. Overlay network в Swarm шифрует трафик между нодами (опция --opt encrypted). Для хранения данных используй Docker Volumes с NFS-монтированием или GlusterFS для shared storage.
История Docker Swarm
Docker Swarm mode интегрирован непосредственно в Docker Engine 1.12 (июль 2016 года), заменив отдельный инструмент Docker Swarm (2014). Встроенная оркестрация основана на протоколе Raft для leader election и хранения состояния кластера. Пиковая популярность — 2016–2018 годы, до массового принятия Kubernetes. Docker Inc. объявила о поддержке Kubernetes в Docker Enterprise Edition в 2017 году. Сегодня Docker Swarm используется для простых сценариев multi-host деплоя, где оверхед Kubernetes избыточен.
Docker Swarm vs Kubernetes
| Параметр | Docker Swarm | Kubernetes |
|---|---|---|
| Сложность настройки | Низкая (минуты) | Высокая (часы/дни) |
| Масштабирование | До ~100 нод | Тысячи нод |
| Экосистема | Ограниченная | Огромная |
| Observability | Базовая | Prometheus, Grafana, Jaeger |
| Rolling updates | Да | Да (богаче) |
| Поддержка в индустрии | Сокращается | Растёт |
На что обращать внимание
Docker Swarm подходит для небольших команд с 3–10 нодами без необходимости сложного автомасштабирования. Для production на VPS с несколькими нодами Swarm — более простая альтернатива Kubernetes. Manager ноды требуют нечётного количества (1, 3, 5) для кворума Raft. Overlay network в Swarm шифрует трафик между нодами (опция --opt encrypted). Для shared storage используй NFS-volume driver или GlusterFS.