Введение
Docker Swarm — это мощное решение для оркестрации контейнеров, позволяющее разработчикам объединить несколько хостов Docker в единую масштабируемую инфраструктуру. Этот исчерпывающий учебник предоставляет глубокое понимание создания, настройки и управления кластерами Docker Swarm, охватывая основные концепции, типы узлов, стратегии развертывания сервисов и лучшие практики для построения надёжных контейнерных сред.
Основы Docker Swarm
Введение в Docker Swarm
Docker Swarm — это собственное решение для кластеризации и оркестрации контейнеров для сред Docker. Оно позволяет разработчикам создавать и управлять кластером Docker-узлов, превращая несколько хостов Docker в один виртуальный хост Docker.
Основные понятия
Архитектура кластера Swarm
graph TD
A[Узел менеджера Swarm] --> B[Рабочий узел 1]
A --> C[Рабочий узел 2]
A --> D[Рабочий узел 3]
Типы узлов Swarm
| Тип узла | Описание | Ответственность |
|---|---|---|
| Узел менеджера | Управляет состоянием кластера | Оркестрация, планирование |
| Рабочий узел | Выполняет рабочие нагрузки контейнеров | Запуск сервисов |
Инициализация кластера Swarm
## Инициализация Swarm на главном узле
docker swarm init --advertise-addr 192.168.1.100
## Генерация токена присоединения для рабочих узлов
docker swarm join-token worker
## Присоединение рабочих узлов к кластеру
docker swarm join --token < token > 192.168.1.100:2377
Ключевые особенности
- Децентрализованная архитектура
- Декларативная модель сервисов
- Масштабирование и постепенные обновления
- Обнаружение сервисов
- Сбалансировка нагрузки
- Защищенное общение
Пример развертывания сервиса
## Создание реплицированного сервиса
docker service create --replicas 3 --name web nginx
## Масштабирование сервиса
docker service scale web=5
## Обновление сервиса
docker service update --image nginx:latest web
Настройка кластера
Топология кластера Swarm
graph TD
A[Узел менеджера] --> B[Рабочий узел 1]
A --> C[Рабочий узел 2]
A --> D[Рабочий узел 3]
Стратегии инициализации узлов
Настройка узла менеджера
## Инициализация кластера Swarm на главном узле менеджера
docker swarm init --advertise-addr 192.168.1.100
## Просмотр токенов присоединения к кластеру
docker swarm join-token manager
docker swarm join-token worker
Настройка рабочего узла
## Присоединение рабочего узла к кластеру
docker swarm join \
--token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxx \
192.168.1.100:2377
Параметры конфигурации кластера
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
| Адрес объявления | Сетевой интерфейс узла | Основной IP-адрес |
| Порт прослушивания | Порт связи Swarm | 2377 |
| Метки узла | Метаданные для выбора узла | Нет |
Расширенная настройка кластера
## Добавление пользовательских меток узла
docker node update --label-add type=frontend worker1
## Установка доступности узла
docker node update --availability drain worker2
Настройка сети
## Создание сети overlay
docker network create \
--driver overlay \
--subnet 10.0.0.0/24 \
my-network
Управление сервисами
Рабочий процесс развертывания сервиса
graph LR
A[Создать сервис] --> B[Развернуть контейнеры]
B --> C[Масштабировать сервис]
C --> D[Обновить сервис]
D --> E[Мониторить производительность]
Создание базового сервиса
## Развернуть сервис nginx с 3 репликами
docker service create \
--name web-service \
--replicas 3 \
--publish 80:80 \
nginx:latest
Параметры конфигурации сервиса
| Параметр | Описание | Пример |
|---|---|---|
| --replicas | Количество экземпляров контейнеров | 3 |
| --update-parallelism | Параллельные обновления | 2 |
| --constraint | Правила размещения узлов | node.labels.type==frontend |
Стратегии масштабирования сервиса
## Динамическое масштабирование сервиса
docker service scale web-service=5
## Горизонтальное масштабирование
docker service update \
--replicas-max-per-node 2 \
web-service
Настройка балансировки нагрузки
## Создание сервиса с пользовательской балансировкой нагрузки
docker service create \
--name api-service \
--replicas 4 \
--publish mode=host,target=8080,published=80 \
--update-delay 10s \
api-image:latest
Механизмы обновления сервиса
## Стратегия постепенного обновления
docker service update \
--image nginx:latest \
--update-parallelism 2 \
--update-delay 10s \
web-service
Мониторинг сервиса
## Список активных сервисов
docker service ls
## Просмотр конкретного сервиса
docker service ps web-service
Резюме
Овладев Docker Swarm, разработчики и системные администраторы могут эффективно управлять контейнерными приложениями в распределённых системах. Данный учебник демонстрирует ключевые техники инициализации кластеров, конфигурации топологий узлов, развертывания сервисов и использования расширенных функций, таких как обнаружение сервисов, балансировка нагрузки и безопасная коммуникация. Понимание этих основ позволяет командам создавать масштабируемые, устойчивые контейнерные инфраструктуры с повышенной операционной эффективностью.



