Гид по технологиям

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

• 9 min read • DevOps • Обновлено 25 Nov 2025
Docker Swarm на Rocky Linux — быстрый старт
Docker Swarm на Rocky Linux — быстрый старт

Схема Docker Swarm и узлы кластера

Введение

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.

  1. Добавьте репозиторий Docker:
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
  1. Обновите списки репозиториев и пакеты:
sudo dnf repo list
sudo dnf update

Если репозиторий добавлен корректно, вы увидите его в списке.

Снимок: список репозиториев, добавлен репозиторий Docker

  1. Установите Docker Engine и сопутствующие пакеты:
sudo dnf install docker-ce docker-ce-cli containerd.io

Подтвердите установку, введя «y», когда система спросит.

Снимок: процесс установки Docker на Rocky Linux

  1. Включите и запустите сервис Docker:
sudo systemctl enable docker
sudo systemctl start docker
  1. Проверьте состояние сервиса:
sudo systemctl status docker

Ожидаемое состояние — active (running).

Снимок: проверка состояния Docker service

  1. (Опционально) Добавьте пользователя в группу 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

Снимок: reload firewalld, порты добавлены

Примечание: если в окружении используются дополнительные сетевые политики (например, облачные 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 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 на менеджере покажет количество нод и менеджеров.

Снимок: статус swarm на менеджере

На воркерах команда 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).

Снимок: доступ к контейнеру через curl, страница 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 и конфигураций.

Чек‑лист для разработчика:

  • Образы минимальны и безопасны.
  • Логи структурированы и пригодны для поиска.
  • Тесты на приёмку приложения при развёртывании.

Мини‑методология развёртывания сервисов

  1. Собрать и протестировать образ локально.
  2. Запушить образ в registry (доступный кластеру).
  3. Создать сервис в Swarm с ограничениями ресурсов и политиками обновления.
  4. Пройти smoke‑test и функциональные тесты.
  5. Запланировать rollout и мониторить метрики.
  6. В случае ошибок — выполнить rollback и анализ причин.

Сравнение: Docker Swarm vs альтернативы (обзор)

  • Kubernetes: более богатый функционал, сложнее в настройке; подходит для крупных распределённых систем.
  • Docker Swarm: проще и быстрее в настройке, тесно интегрирован с Docker; подходит для небольших и средних проектов.
  • Nomad: лёгкий планировщик от HashiCorp, хорошо интегрируется с Consul и Vault.

Выбор зависит от требований к функционалу, наличия специализации команды и потребностей в экосистеме (CI/CD, service mesh и т.д.).

План восстановления и отката (runbook)

  1. Если менеджер упал: проверьте systemctl status docker, перезапустите сервис.
  2. Если несколько менеджеров недоступны: восстановите один менеджер из бэкапа сертификатов/данных.
  3. При проблемах с сервисом: выполните docker service ps, docker service logs/контейнер, затем docker service rollback при необходимости.
  4. При нарушении сети 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 — простой в освоении инструмент оркестрации контейнеров, хорошо подходит для небольших и средних проектов.
  • Для продакшна потребуется продумать безопасность, мониторинг и стратегию резервного копирования.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро