Ответ
Да, я использовал Docker Swarm для оркестрации контейнеров в проектах, где требовалась относительная простота и минимальные накладные расходы по сравнению с Kubernetes.
Мой опыт включает:
- Инициализацию Swarm-кластера (
docker swarm init) и добавление в него worker-нод (docker swarm join). - Развертывание сервисов (
docker service create) с настройкой реплик, сетей, секретов и конфигов. - Управление жизненным циклом: масштабирование (
docker service scale), обновление образа с zero-downtime (docker service update --image), откат изменений. - Настройку overlay-сетей для связи сервисов между разными нодами кластера.
- Развертывание стеков через
docker stack deployс использованиемdocker-compose.ymlверсии 3.
Пример развертывания отказоустойчивого веб-сервиса:
# Инициализация Swarm на manager-ноде
$ docker swarm init --advertise-addr <MANAGER-IP>
# Создание overlay-сети
$ docker network create --driver overlay my_webnet
# Развертывание сервиса nginx с 3 репликами
$ docker service create
--name web
--replicas 3
--network my_webnet
--publish published=80,target=80
nginx:alpine
# Проверка статуса сервиса и его реплик
$ docker service ps web
Практический пример docker-compose.yml для Swarm (с поддержкой секретов):
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
secrets:
- site_cert
networks:
- webnet
deploy:
replicas: 3
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
secrets:
site_cert:
external: true
networks:
webnet:
driver: overlay
Когда Swarm был хорошим выбором: Для небольших или средних проектов, где нужна встроенная, простая в освоении оркестровка без сложной настройки. Для более сложных сценариев с автоматическим масштабированием, богатыми возможностями сетевой политики и обширной экосистемой я предпочитаю Kubernetes.