Работал ли с Docker Swarm?

«Работал ли с Docker Swarm?» — вопрос из категории Docker, который задают на 26% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я использовал 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.