도커로 컨테이너 여러 개를 묶어 쓰기 시작하면 docker compose를 만나고, 조금 더 찾아보면 docker swarm이라는 단어도 나옵니다. 둘 다 "여러 컨테이너를 다룬다"는 점이 비슷해서 헷갈립니다. 핵심 차이는 한 줄로 정리됩니다. Compose는 한 대(호스트)에서 컨테이너 묶음을 정의·실행하는 도구, Swarm은 여러 대(노드)에 그 묶음을 분산 운영하는 오케스트레이터입니다.
한눈에 비교
| 항목 | Docker Compose | Docker Swarm |
|---|---|---|
| 대상 범위 | 단일 호스트 | 여러 노드(클러스터) |
| 주 용도 | 로컬 개발·테스트 | 운영 배포·확장 |
| 스케일링 | 수동(--scale) | 선언적 replicas + 자동 재배치 |
| 장애 복구 | 없음(재시작 정책 정도) | 노드 죽으면 다른 노드로 재스케줄 |
| 설정 파일 | compose.yaml | 거의 같은 형식 + deploy 키 |
| 비밀 관리 | 환경변수 위주 | docker secret 지원 |
같은 compose.yaml을 양쪽이 거의 그대로 쓴다는 점이 둘을 더 헷갈리게 합니다. 차이는 "어디서, 몇 대에 걸쳐 실행되느냐"입니다.
Compose — 내 PC에서 묶음 띄우기
여러 서비스(앱 + DB 등)를 한 파일로 정의하고 한 명령으로 올립니다. 개발 환경 재현에 최적입니다.
Docker
docker compose up -d
docker compose ps
docker compose down
compose.yaml의 services: 아래에 컨테이너들을 적으면 같은 호스트, 같은 네트워크에서 함께 뜹니다.
Swarm — 여러 대에 분산 운영
여러 서버를 하나의 클러스터로 묶고, 서비스를 노드들에 펼칩니다. 노드가 죽으면 다른 노드에서 다시 띄워 줍니다.
로컬 터미널
docker swarm init
docker stack deploy -c compose.yaml myapp
docker service scale myapp_web=5
deploy.replicas: 3 같은 선언을 넣으면 Swarm이 그 개수를 유지하려 애씁니다.
언제 무엇을 쓰나
- 로컬 개발·CI 테스트: Compose. 한 대에서 묶음을 빠르게 띄우고 내리면 충분합니다.
- 소규모 운영(몇 대 안 되는 서버, 단순 구성): Swarm이 가볍게 맞습니다.
- 대규모·복잡한 운영(오토스케일, 다양한 배포 전략, 풍부한 생태계): 대부분 쿠버네티스로 갑니다. Swarm은 학습 비용이 낮은 대신 기능·생태계가 제한적입니다.
요점 정리
- Compose = 단일 호스트 묶음 실행, Swarm = 다중 노드 분산 운영.
- 설정 파일 형식은 거의 같고, Swarm은
deploy키로 복제·배치를 더한다. - 개발은 Compose, 가벼운 운영은 Swarm, 본격 운영은 보통 쿠버네티스.
Compose로 멀티 컨테이너를 직접 띄워 보고 Swarm으로 확장하는 흐름을 실습하려면 도커 트랙에서 할 수 있습니다 — 회원가입 없이 무료로.