스웜
Docker Swarm
Docker의 기본 컨테이너 오케스트레이션. Kubernetes보다 단순. 소규모 클러스터에 적합.
Docker Swarm
Docker의 기본 컨테이너 오케스트레이션. Kubernetes보다 단순. 소규모 클러스터에 적합.
Docker Swarm은 Docker에 내장된 네이티브 컨테이너 오케스트레이션 도구입니다. 여러 Docker 호스트를 하나의 가상 호스트로 클러스터링하여 컨테이너를 분산 배포하고 관리합니다. Docker 1.12(2016년)부터 Docker Engine에 통합되었습니다.
아키텍처는 Manager 노드(클러스터 관리, 스케줄링)와 Worker 노드(컨테이너 실행)로 구성됩니다. Raft 합의 알고리즘으로 Manager 간 상태를 동기화하고, 최소 3개 Manager로 고가용성을 확보합니다. 서비스(Service) 단위로 배포하며 자동 로드밸런싱을 지원합니다.
Kubernetes 대비 학습 곡선이 낮고 설정이 단순합니다. docker-compose.yml을 docker stack deploy로 배포할 수 있어 기존 Docker 사용자에게 친숙합니다. 단, 에코시스템과 커뮤니티 규모에서 Kubernetes에 비해 제한적입니다.
실무에서는 소규모 팀, 간단한 서비스, 빠른 프로토타이핑에 적합합니다. 10-20개 컨테이너 규모까지는 Swarm이 효율적이며, 규모가 커지면 Kubernetes 마이그레이션을 고려합니다. CI/CD 파이프라인 내 테스트 환경 구축에도 활용됩니다.
# Swarm 클러스터 초기화 및 관리
docker swarm init --advertise-addr 192.168.1.10
docker swarm join-token worker # Worker 조인 토큰 확인
docker swarm join-token manager # Manager 조인 토큰 확인
# 노드 관리
docker node ls # 노드 목록
docker node promote worker-1 # Worker를 Manager로 승격
docker node update --availability drain manager-2 # 유지보수 모드
# docker-compose.yml (Stack 배포용)
version: '3.8'
services:
web:
image: nginx:alpine
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
failure_action: rollback
rollback_config:
parallelism: 1
restart_policy:
condition: on-failure
max_attempts: 3
resources:
limits:
cpus: '0.5'
memory: 256M
ports:
- "80:80"
networks:
- webnet
api:
image: myapp/api:latest
deploy:
replicas: 2
placement:
constraints:
- node.role == worker
secrets:
- db_password
networks:
- webnet
networks:
webnet:
driver: overlay
secrets:
db_password:
external: true
# Stack 배포 및 관리
docker stack deploy -c docker-compose.yml myapp
docker stack services myapp # 서비스 목록
docker service scale myapp_web=5 # 스케일 조정
docker service logs myapp_api -f # 로그 확인
시니어: "개발 환경은 Swarm으로 빠르게 구성하고, 운영은 Kubernetes로 가져가는 게 어때요?"
주니어: "좋아요. docker-compose 파일 그대로 swarm에 배포할 수 있으니 개발 환경 구축이 훨씬 빠르겠네요."
면접관: "Docker Swarm과 Kubernetes를 비교해서 설명해주세요."
지원자: "Swarm은 Docker 내장으로 설정이 간단하고 학습 곡선이 낮습니다. Kubernetes는 기능이 풍부하고 에코시스템이 크지만 복잡합니다. 소규모 프로젝트는 Swarm, 대규모 프로덕션은 Kubernetes가 적합합니다."
리뷰어: "Manager 노드가 1개뿐인데, 단일 장애점 아닌가요?"
개발자: "맞아요, 운영 환경에서는 Manager 3개로 HA 구성하겠습니다. 개발용이라 일단 1개로 두었어요."