Docker Swarm на Rocky Linux — пошаговое руководство

Введение
Docker Swarm — встроенный в Docker механизм оркестрации контейнеров. Он позволяет создать кластер Docker‑узлов (нод) и управлять контейнеризованными приложениями как сервисами. Swarm реализует распределённый контроль, маршрутизацию запросов и обеспечение высокой доступности за счёт работы сервисов на нескольких узлах.
В этом руководстве показано, как настроить Docker Swarm на серверах Rocky Linux: установка Docker Engine, настройка firewalld, инициализация менеджера, подключение воркеров, развертывание, масштабирование и удаление сервисов. Также вы получите практические советы по эксплуатации, безопасности и восстановлению.
Важно: термины
- Нода — сервер, на котором запущен Docker Engine.
- Менеджер (Manager) — нода, управляющая состоянием кластера.
- Воркер (Worker) — нода, на которой выполняются контейнеры сервиса.
- Сервис — объект Swarm, представляющий запускаемое приложение с набором реплик.
Что понадобится
Требования для выполнения шагов в этом руководстве:
- Минимум три сервера с Rocky Linux (можно использовать виртуальные машины). Рекомендуется выделять отдельные сервера для менеджеров и воркеров в продакшне.
- Пользователь с sudo‑правами на каждом сервере.
- Сетевое соединение между экземплярами, открытые порты, описанные ниже.
Пример конфигурации, используемой в демонстрации:
Hostname IP Address Назначение
---------------------------------------------------
swarm-manager1 192.168.5.100 Swarm Manager
worker1 192.168.5.120 Worker
worker2 192.168.5.121 WorkerФактическая сводка ключевых параметров
- Порты: 2377/tcp (cluster management), 7946/tcp и 7946/udp (взаимодействие нод), 4789/udp (overlay сеть), плюс порты сервисов (например, 8000/tcp).
- По умолчанию overlay сеть может иметь адресный пул, который вы указываете при инициализации.
- Менеджеров можно иметь несколько для отказоустойчивости; quorum важен для корректной работы.
Установка Docker Engine на Rocky Linux
Для работы Swarm нужен Docker Engine на каждой ноде. В Rocky Linux Docker удобно установить из официального репозитория Docker.
- Добавьте репозиторий Docker:
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo- Обновите списки репозиториев и пакеты:
sudo dnf repo list
sudo dnf updateЕсли репозиторий добавлен корректно, вы увидите его в списке.

- Установите Docker Engine и сопутствующие пакеты:
sudo dnf install docker-ce docker-ce-cli containerd.ioПодтвердите установку, введя «y», когда система спросит.

- Включите и запустите сервис Docker:
sudo systemctl enable docker
sudo systemctl start docker- Проверьте состояние сервиса:
sudo systemctl status dockerОжидаемое состояние — active (running).

- (Опционально) Добавьте пользователя в группу docker, чтобы запускать docker без sudo:
sudo usermod -aG docker userПосле этого выйдите и войдите снова в сессию пользователя.
Настройка firewalld для Docker Swarm
В продакшн окружении следует иметь включённый брандмауэр. В Rocky Linux обычно используется firewalld. Ниже перечислены порты, которые нужно открыть для корректной работы Swarm:
- 2377/tcp — управление кластером (используют менеджеры);
- 7946/tcp и 7946/udp — коммуникация между нодами;
- 4789/udp — трафик overlay сети;
- порты приложений — например 8000/tcp, если сервис слушает этот порт.
Откройте порты на каждой ноде:
sudo firewall-cmd --add-port=2377/tcp --permanent
sudo firewall-cmd --add-port=7946/tcp --permanent
sudo firewall-cmd --add-port=7946/udp --permanent
sudo firewall-cmd --add-port=4789/udp --permanentПерезагрузите правила и посмотрите список открытых портов:
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
Примечание: если в окружении используются дополнительные сетевые политики (например, облачные security groups), откройте те же порты и там.
Инициализация Swarm Manager
Менеджер Swarm управляет состоянием кластера, хранит в себе информацию о сервисах и распределении задач. Для высокой доступности рекомендуется иметь не менее трёх менеджеров (quorum), но в простых тестах достаточно одного.
На сервере, который вы назначаете менеджером (в примере — swarm-manager1 с IP 192.168.5.100), выполните:
docker swarm init --advertise-addr 192.168.5.100 --default-addr-pool 10.10.0.0/16Опции:
- –advertise-addr — адрес, по которому другие ноды будут связываться с менеджером;
- –default-addr-pool — пул адресов для overlay сетей (по желанию).
После успешной инициализации вы увидите токен для присоединения воркеров и менеджеров. Скопируйте его или используйте команду join на целевых нодах.
Проверьте, что Swarm включён:
docker infoВы увидите Swarm: active и информацию о сетях и нодах.

Список нод на менеджере:
docker node lsПока что в списке будет одна нода — ваш менеджер.
Добавление воркеров в Swarm
Воркеры выполняют задачи (контейнеры) сервисов. На каждой воркер‑ноде должен быть установлен Docker Engine. Команда присоединения выглядит примерно так:
docker swarm join \
--token SWMTKN-1-... 192.168.5.100:2377Токен, который вы видите после docker swarm init, будет отличаться в вашей среде. Выполните команду на worker1 и worker2. Если всё прошло успешно, вы увидите сообщение “This node joined a swarm as a worker”.
Вернитесь на менеджер и проверьте список нод:
docker node lsВ списке должны появиться все ноды (manager и воркеры).
Также команда docker info на менеджере покажет количество нод и менеджеров.

На воркерах команда docker info покажет информацию о подключении к менеджеру и адрес менеджера 192.168.5.100:2377.

Совет: если ноды не появляются, проверьте сетевую доступность порта 2377 и отсутствие блокировок в SELinux/iptables.
Разворачивание сервиса в Swarm
В модели Swarm приложение разворачивается как сервис. Сервис описывает образ, количество реплик, сетевые настройки, политики обновления и пр.
Пример: создать сервис test-httpd с 1 репликой и пробросом порта 8000 на 80:
docker service create --replicas 1 --name test-httpd -p 8000:80 httpd:alpineПроверьте список сервисов:
docker service lsПосмотреть детали сервиса:
docker service inspect test-httpd
docker service inspect --pretty test-httpdПосмотреть задачи/контейнеры сервиса:
docker service ps test-httpdВы увидите, на какой ноде запущена реплика (в примере — swarm-manager1).
Не забудьте открыть порт 8000 в firewall на каждой ноде (или в облачных security groups).
sudo firewall-cmd --add-port=8000/tcp --permanent
sudo firewall-cmd --reloadПроверка доступа к сервису через curl:
curl 192.168.5.100:8000
curl -I 192.168.5.100:8000Вы должны увидеть ответ от веб‑сервера (index.html).

Масштабирование сервисов
Swarm поддерживает динамическое масштабирование. Увеличьте число реплик до 3:
docker service scale test-httpd=3Команда создаст дополнительные задачи и распределит их по доступным воркерам. Проверьте расположение реплик:
docker service ps test-httpdПроверьте на воркерах, что контейнеры запущены:
docker ps
curl worker1:8000
curl worker2:8000Если нагрузка растёт, вы можете масштабировать сервисы вручную или автоматизировать масштабирование через внешние системы (например, Prometheus + autoscaler). Swarm не содержит встроенного автоскейлера по метрике.
Обновление и откат сервиса
Swarm поддерживает rolling updates и откат:
docker service update --image myapp:v2 test-httpdЕсли update прошёл некорректно, можно выполнить rollback:
docker service update --rollback test-httpdРекомендуется тестировать обновление в отдельной ветке/кластерной среде перед продакшеном.
Удаление сервиса и очистка
Для удаления сервиса:
docker service rm test-httpdПроверка, что сервис удалён:
docker service inspect test-httpdОчистка контейнеров и образов:
docker ps -a
docker imagesЕсли нужно полностью вывести ноду из Swarm:
На ноде, которую выводим:
docker swarm leaveНа менеджере, чтобы удалить ноду из кластера:
docker node rm Если выводите менеджера, сначала переведите управление или демотируйте менеджера.
Практические советы по эксплуатации
- Менеджеры: для продакшн‑кластера используйте нечётное количество менеджеров (3,5) для обеспечения quorum.
- Резервное копирование: храните бэкапы конфигураций, docker volumes и образов (registry или pull policy).
- Мониторинг: собирайте метрики Docker, нод и сети (Prometheus, cAdvisor, node_exporter).
- Логирование: централизуйте логи (ELK/EFK, Loki).
- Сеть: контролируйте MTU overlay сети при использовании VPN/host routing.
Безопасность и усиление
- Используйте TLS для удалённого управления Docker‑API. По умолчанию Swarm генерирует сертификаты, но в корпоративной среде рассмотрите корпоративный CA.
- Ограничьте доступ к портам менеджера (2377) с помощью firewalld и списков контроля доступа.
- Применяйте политики безопасности на уровне хоста (SELinux включён по умолчанию в Rocky Linux) и проверяйте совместимость контейнеров.
- Разграничьте права: используйте RBAC в интеграции с внешними системами, где это возможно.
Критерии приёмки
- Все ноды зарегистрированы в Swarm: на менеджере docker node ls показывает ожидаемое количество нод.
- Сервис успешно развёрнут и доступен по назначенному порту с каждого узла.
- Реплики распределены по воркерам в соответствии с заданным количеством.
- Все необходимые порты открыты в firewalld и в сетевых политиках облака.
- Мониторинг и логирование собирают данные, алерты настроены на ключевые метрики.
Технические сценарии и отладка
Проблема: ноды не видят менеджера
- Проверьте связь по порту 2377: telnet 192.168.5.100 2377 или nc -vz.
- Проверьте, нет ли ограничения в cloud security groups.
- Проверяйте логи docker: sudo journalctl -u docker -f.
Проблема: контейнер не запускается на воркере
- Посмотрите docker service ps
и docker logs контейнера. - Проверяйте доступность образа (registry, credentials).
- Убедитесь, что ресурсы CPU/RAM не исчерпаны.
Проблема: overlay сеть не работает
- Проверьте, открыт ли порт 4789/udp между нодами.
- Проверьте, совпадает ли MTU и нет ли фрагментации пакетов.
Роли и чек‑листы
Чек‑лист для инженера по развертыванию:
- Установлен Docker Engine на всех нодах.
- Открыты порты 2377, 7946 (tcp/udp), 4789/udp.
- Инициализирован менеджер и получен токен.
- Воркеры успешно присоединены и видны в docker node ls.
- Развёрнут тестовый сервис и проверена доступность.
- Настроено мониторирование и логирование.
Чек‑лист для оператора:
- Регулярные проверки статуса нод.
- Контроль использования диска и памяти.
- Обновления образов и откатный план.
- Backups volume и конфигураций.
Чек‑лист для разработчика:
- Образы минимальны и безопасны.
- Логи структурированы и пригодны для поиска.
- Тесты на приёмку приложения при развёртывании.
Мини‑методология развёртывания сервисов
- Собрать и протестировать образ локально.
- Запушить образ в registry (доступный кластеру).
- Создать сервис в Swarm с ограничениями ресурсов и политиками обновления.
- Пройти smoke‑test и функциональные тесты.
- Запланировать rollout и мониторить метрики.
- В случае ошибок — выполнить rollback и анализ причин.
Сравнение: Docker Swarm vs альтернативы (обзор)
- Kubernetes: более богатый функционал, сложнее в настройке; подходит для крупных распределённых систем.
- Docker Swarm: проще и быстрее в настройке, тесно интегрирован с Docker; подходит для небольших и средних проектов.
- Nomad: лёгкий планировщик от HashiCorp, хорошо интегрируется с Consul и Vault.
Выбор зависит от требований к функционалу, наличия специализации команды и потребностей в экосистеме (CI/CD, service mesh и т.д.).
План восстановления и отката (runbook)
- Если менеджер упал: проверьте systemctl status docker, перезапустите сервис.
- Если несколько менеджеров недоступны: восстановите один менеджер из бэкапа сертификатов/данных.
- При проблемах с сервисом: выполните docker service ps, docker service logs/контейнер, затем docker service rollback при необходимости.
- При нарушении сети overlay: проверьте firewalld, cloud rules, сетевые таблицы.
Миграция в продакшн и советы
- Нагрузочное тестирование: прогоните нагрузочные тесты, чтобы понять поведение при повышенном количестве соединений.
- Планируйте дрейф конфигурации: поддерживайте конфигурации в виде кода (IaC).
- Обдумайте стратегию хранения данных: stateful сервисы требуют отдельного подхода (стейтфул приложения через volumes/сторэйдж).
Часто задаваемые вопросы
Как добавить ещё менеджеров в кластер?
На новом сервере выполните docker swarm join с токеном менеджера (manager token). Менеджеры повышают отказоустойчивость, но добавлять их нужно аккуратно — поддерживайте нечётное число менеджеров.
Можно ли использовать менеджеры как воркеры?
Да. Менеджер по умолчанию может запускать задачи. Для изоляции контролируемых рабочих нагрузок в продакшне часто менеджеры помечают как drain или используют отдельный пул воркеров.
Как увеличить размер сети overlay?
При инициализации можно задать –default-addr-pool. После создания сетей менять пул для уже созданных сетей нельзя.
Как безопасно обновлять сервисы без простоев?
Используйте механизмы rolling update с контролем healthcheck и readiness. Задайте pause и parallelism при необходимости.
Заключение
Вы настроили Docker Swarm на трех серверах Rocky Linux: установили Docker Engine, настроили firewalld, инициализировали менеджера, добавили воркеров и развернули тестовый сервис. Вы узнали, как масштабировать, обновлять и удалять сервисы, а также получили практические советы по безопасности, мониторингу и восстановлению.
Дальшие шаги:
- Настройте мониторинг и алерты;
- Автоматизируйте сбор образов и pipeline CI/CD;
- Планируйте количество менеджеров для обеспечения quorum и отказоустойчивости.
Важно
- Тестируйте любые изменения в тестовом кластере перед продакшеном.
- Всегда храните резервные копии данных и конфигураций.
Краткое резюме
- Docker Swarm — простой в освоении инструмент оркестрации контейнеров, хорошо подходит для небольших и средних проектов.
- Для продакшна потребуется продумать безопасность, мониторинг и стратегию резервного копирования.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента