개요

Docker Swarm은 Docker에 내장된 컨테이너 오케스트레이션 도구. 여러 Docker 호스트를 하나의 클러스터로 묶어 컨테이너를 분산 배포·관리.

  • 개발: Docker Inc.
  • 특징: Docker CLI·Compose 파일 그대로 사용 가능, 별도 설치 불필요
  • 경쟁: Kubernetes (더 강력하지만 복잡), Swarm (단순하지만 기능 제한)

아키텍처

┌─────────────────────────────────┐
│         Swarm Cluster           │
│                                 │
│  ┌──────────┐  ┌──────────┐    │
│  │ Manager  │  │ Manager  │    │  ← 리더 선출 (Raft 합의)
│  │  Node    │  │  Node    │    │
│  └──────────┘  └──────────┘    │
│                                 │
│  ┌──────┐ ┌──────┐ ┌──────┐   │
│  │Worker│ │Worker│ │Worker│   │  ← 실제 컨테이너 실행
│  │ Node │ │ Node │ │ Node │   │
│  └──────┘ └──────┘ └──────┘   │
└─────────────────────────────────┘
역할설명
Manager Node클러스터 상태 관리, 작업 스케줄링, Raft 합의 알고리즘
Worker Node실제 컨테이너(Task) 실행

기본 명령어

# Swarm 초기화 (첫 번째 Manager)
docker swarm init --advertise-addr <manager-ip>
 
# Worker 노드 추가 (init 후 출력되는 토큰 사용)
docker swarm join --token <token> <manager-ip>:2377
 
# Manager 노드 추가 토큰 확인
docker swarm join-token manager
 
# 노드 목록
docker node ls
 
# 서비스 배포
docker service create --name web --replicas 3 -p 80:80 nginx
 
# 서비스 목록
docker service ls
 
# 서비스 상태 확인
docker service ps web
 
# 스케일 조정
docker service scale web=5
 
# 서비스 업데이트 (롤링 업데이트)
docker service update --image nginx:latest web
 
# 서비스 삭제
docker service rm web
 
# Swarm 떠나기 (Worker)
docker swarm leave

Docker Stack (Compose 파일로 배포)

# docker-compose.yml
version: '3.8'
 
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure
    networks:
      - webnet
 
  visualizer:
    image: dockersamples/visualizer
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints:
          - node.role == manager
 
networks:
  webnet:
# Stack 배포
docker stack deploy -c docker-compose.yml myapp
 
# Stack 목록
docker stack ls
 
# Stack 서비스 확인
docker stack services myapp
 
# Stack 삭제
docker stack rm myapp

Kubernetes vs Docker Swarm

항목Docker SwarmKubernetes
학습 곡선낮음높음
설정 복잡도낮음높음
기능기본적매우 풍부
확장성중소 규모대규모
생태계제한적방대함
자동 복구기본 지원고급 지원
로드밸런싱내장 (VIP)외부 LB 필요
적합 상황소규모, 단순 배포엔터프라이즈, 복잡한 요구

언제 Swarm을 쓸까

  • Docker Compose 파일 그대로 클러스터로 확장하고 싶을 때
  • Kubernetes 도입하기엔 팀 규모나 서비스가 작을 때
  • 빠르게 HA(고가용성) 환경 구성이 필요할 때
  • 운영 복잡도를 최소화하고 싶을 때

관련 항목