Если вы уже давно интересуетесь DevOps то вы скорее всего слышали про обычный Swarm, который ставился отдельно и не был частью Docker. Это был отдельный внешний проект (до 2016 г.), представлявший собой менеджер, который соединяет несколько Docker-демонов в кластер. Т.е. это был отдельный бинарник swarm, который управлял демонами Docker через API. Также требовалось внешнее хранилище (Consul, etcd, Zookeeper) для хранения конфигурации. Сейчас обычный Swarm уже не используется и официально переехал в сам продукт Docker.

Docker Swarm mode (или просто Docker Swarm)

Начиная с Docker 1.12 (2016 г.), Swarm встроили прямо в Docker Engine, что упростило использование и конфигурацию Swarm для конечного пользователя.

Было Стало
Отдельный бинарник swarm Встроено в dockerd
Внешний KV-store (etcd/Consul) Встроенная Raft-база
Простое объединение демонов Полноценная оркестрация (services, tasks, scaling)
Без встроенной безопасности Автоматические TLS-сертификаты между нодами
Нет встроенной сети Overlay-сети, load-balancing и secrets из коробки

docker-swarm-evolution

Зачем мне Docker Swarm?

Docker Swarm — это встроенная в Docker система оркестрации контейнеров, то есть инструмент, который управляет запуском, масштабированием и отказоустойчивостью множества контейнеров, работающих на нескольких хостах (нодах).

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

Ключевые задачи, которые решает Docker Swarm:

docker-swarm-features