В чем разница между Docker Compose и Docker Swarm?

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

Ответ

Оба инструмента служат для управления контейнерами, но решают задачи разного масштаба и сложности.

Docker Compose — это инструмент для определения и запуска мультиконтейнерных приложений на одной хостовой машине.

  • Назначение: Локальная разработка, тестирование и демонстрации.
  • Архитектура: Один хост (ваш ноутбук или dev-сервер).
  • Управление: Через YAML-файл (docker-compose.yml), описывающий сервисы, сети и тома.
  • Ограничения: Нет встроенной отказоустойчивости, балансировки нагрузки или управления кластером.

Пример docker-compose.yml:

version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example

Docker Swarm — это встроенный в Docker оркестратор для создания и управления кластером из нескольких Docker-хостов.

  • Назначение: Продакшен-среды, требующие высокой доступности и масштабирования.
  • Архитектура: Кластер из нод (manager и worker).
  • Возможности: Отказоустойчивость (перезапуск сервисов на других нодах), масштабирование реплик, балансировка нагрузки через встроний ingress-сеть, rolling updates.
  • Управление: Через Docker CLI (docker service) или файлы конфигурации в стиле Compose (с некоторыми отличиями).

Пример развертывания сервиса в Swarm:

# Инициализация Swarm на manager-ноде
docker swarm init
# Создание сервиса с 3 репликами
docker service create --name web --replicas 3 -p 80:80 nginx:alpine
# Масштабирование сервиса
docker service scale web=5

Вывод: Используйте Compose для локальной разработки одного приложения. Используйте Swarm для простых продакшен-кластеров, где нужна отказоустойчивость и масштабирование без сложностей Kubernetes.