Ответ
Да, я использовал Docker Swarm для оркестрации контейнеров в нескольких проектах на Node.js, где требовалась отказоустойчивость и простота управления по сравнению с более сложными системами вроде Kubernetes.
Пример развертывания Node.js микросервиса в Swarm:
-
Инициализация Swarm и развертывание стека:
# На manager-ноде docker swarm init --advertise-addr <MANAGER-IP> # Создание overlay сети для межсервисного взаимодействия docker network create --driver overlay my-app-network # Деплой стека из docker-compose.yml docker stack deploy -c docker-compose.yml myapp -
docker-compose.ymlдля Swarm (упрощенный пример):version: '3.8' services: api: image: my-registry/node-api:latest deploy: replicas: 3 restart_policy: condition: on-failure delay: 5s update_config: parallelism: 1 delay: 10s order: start-first networks: - my-app-network environment: - NODE_ENV=production - REDIS_HOST=redis ports: - published: 3000 target: 3000 protocol: tcp mode: ingress redis: image: redis:alpine deploy: replicas: 1 placement: constraints: [node.role == manager] networks: - my-app-network volumes: - redis-data:/data networks: my-app-network: external: true volumes: redis-data:
Ключевые преимущества, которые я использовал:
- Секреты (Secrets): Безопасное хранение чувствительных данных (ключей API, паролей БД) и их монтирование в контейнеры как файлы.
- Сервисное обнаружение: Встроенный DNS для обращения к сервисам по имени (например,
redis) внутри overlay-сети. - Отказоустойчивость: Swarm автоматически перезапускает упавшие реплики и перераспределяет их по нодам.
Я применял Swarm для деплоя кластера из Node.js API, worker-ов на Bull (обработка очередей) и вспомогательных сервисов (Redis, PostgreSQL). Для мониторинга использовал комбинацию docker service logs и внешние инструменты вроде ELK-стека.