[Docker] Docker Swarm 이란? 아키텍처와 주요 명령어(+쿠버네티스 비교)
by 우와한개발자
[ Docker Swarm 도커스웜 ]
1.Docker Swarm 이란
- docker 에서 제공하는 고수준의 클러스터링 및 오케스트레이션 도구
❓HA(고가용성 high availability)
- 서버 일부가 죽어도 서비스가 계속 운영되도록 하는 설계 방식
- 단일 장애점(Single Point of Failure)을 없애기 위함
❓고가용성을 위한 서버 다중화 방식
1) Active-Standby 방식
- Active 하나만 실제 요청 처리
- Standby는 언제든 대신할 수 있게 대기만 함
- 하둡 NameNode 가 대표적인 예 → Primary NameNode 죽으면 Secondary가 대신함
2) Active-Active 방식
- 모든 서버가 동시에 요청 처리
- 로드밸런서가 트래픽 분산 필수
- 하나 죽어도 나머지가 이어받음
2. Docker Swarm 아키텍처 및 용어
1) 노드 (Node)
- 도커 스웜 클러스터의 각 호스트
- 노드는 매니저 노드와 워커 노드로 나뉨
(1) 매니저 노드
- 클러스터 관리와 스케줄링 담당
- 기본적으로 2377 포트 사용
- 새로운 노드를 클러스터에 조인하거나 스웜 관리 작업 수행
(2) 워커 노드
- 매니저 노드의 지시를 받아 실제 컨테이너 실행
2) 서비스 (Service)
- 여러 노드에 걸쳐 실행되는 동일한 컨테이너들의 그룹
- 서비스를 사용하여 확장, 로드 밸런싱, 롤링 업데이트 등을 관리
3) 스케일링 (Scaling)
- 자동으로 인스턴스(컨테이너) 수를 조절 (복제(replica) 수 조절)
4) 로드 밸런싱 (Load Balancing)
- 라운드로빈 등 다양한 방식으로 트래픽 분산
5) 스웜 모드 (Swarm Mode)
- 여러 대의 도커 호스트를 하나의 클러스터로 묶어서 관리하는 도커의 내장 오케스트레이션 기능
- 명령어 한 번으로 전체 관리
docker swarm init # 스웜 모드 ON
docker swarm leave # 스웜 모드 OFF
6) 보안 (Security)
- 서비스 간 통신 암호화
- RBAC (롤 기반 액세스 제어)를 통한 권한 관리 가능
7) 엔드포인트 모드 (endpoint_mode)
- 도커 스웜의 엔드포인트: 클러스터를 관리하고 서비스에 액세스하는 데 사용되는 URL 또는 IP 주소 및 포트
(1) 엔드포인트 종류
| 종류 | 포트 | 용도 |
| 매니저 노드 | 2377 | 노드 조인·스웜 관리 명령 |
| 웹 UI | 2375 (HTTP) / 2376 (HTTPS) | 브라우저로 스웜 관리 |
| 서비스 | 직접 지정한 포트 | 실제 앱 접속 |
(2) 서비스에 대한 네트워크 엔드포인트 할당 방식
| 방식 | 값 | 설명 |
| 가상 IP | vip | 하나의 대표 IP로 모든 컨테이너에 단일 엔드포인트 제공 |
| DNS 라운드 로빈 | dnsrr | 각 컨테이너에 별도 DNS 레코드 할당, 순서대로 분산 |
| 내장 로드밸런서 | ingress | 어느 노드로 접속해도 스웜이 알아서 컨테이너로 연결 |
3. Docker Swarm 주요 명령어
1) 스웜 초기화 및 조인
docker swarm init --advertise-addr <ip> # 스웜 클러스터 초기화(스웜 모드 ON)
docker swarm join --token <token> <manager-ip>:<port> # 워커 노드 조인
docker swarm leave --force # 스웜 클러스터에서 강제 이탈(스웜모드 OFF)
2) 스웜 정보 확인
docker info # 스웜 클러스터 전반적인 정보 조회
docker node ls # 스웜 노드 목록 조회
docker service ls # 스웜 서비스 목록 조회
3) 스웜 서비스 관리
docker service create --name <name> <image> # 서비스 생성
docker service scale <service-name>=<replica-count> # 서비스 스케일링
docker service update --image <new-image> <name> # 서비스 업데이트
docker service rm <service-name> # 서비스 제거
4) 스웜 노드 관리
docker node rm <node-id> # 노드 제거
docker node update --availability drain <node-id> # 노드 작업 중지
5) 서비스 네트워크 확인
docker service ps <service-name> --no-trunc # 서비스 task/container 상세 확인
docker inspect <network-id> # 네트워크 구조 상세 확인
6) 스택 실행
- 스택 stack : docker-compose.yml 파일로 정의한 여러 서비스를 하나의 묶음으로 스웜에 배포하는 단위
docker stack deploy -c docker-compose.yml my_stack # 컴포즈 파일로 스웜 실행
kubectl delete all --all # 모든 리소스 삭제
5. Docker Swarm실행
1) 초기화
docker swarm init
docker swarm init --advertise-addr 192.168.2.49 # 가상화한경우
- 가상화한경우에는 하나의 이더넷카드에 두개 이상의 ip가 할당되어있으면 오류가 발생할 수 있어 ip주소 명시
2) 컴포즈 파일 작성 (docker-compose.yml)
version: '3.8'
services:
oracle-db:
image: jinkyoungheo/oracle11g
ports:
- 1521:1521
tomcat-app:
image: jinkyoungheo/tomcat10
deploy:
replicas: 3 # 레플리카 3개
endpoint_mode: vip # 가상 IP 방식
volumes:
- tomcat_vol:/usr/local/tomcat/webapps
ports:
- 8888:8080
volumes:
tomcat_vol:
3) 스웜 실행 및 확인
docker stack deploy -c docker-compose.yml my_stack # 스웜 실행
docker service ls # 서비스 확인
docker service scale my_stack_tomcat-app=2 # 스케일 조정
4) 컨테이너 강제 삭제 후 자동 복구 확인
docker stop <container-id> # 컨테이너 하나 강제 중지
docker service ls # 잠시 후 다시 확인 → 자동으로 3/3 복구됨
5) 전체 삭제
docker stack rm my_stack # 스택 전체 삭제 (서비스·컨테이너 모두 삭제)
[ Docker Swarm vs Kubernetes 비교 ]
| 구분 | Docker Swarm | Kubernetes |
| 난이도 | 쉬움 | 복잡함 |
| 아키텍처 | 마스터-워커 (2계층) | 마스터-노드-워커 (3계층) |
| 배포 단위 | 서비스(Service) | 파드(Pod) |
| 설치 | 도커에 내장 | 별도 설치 필요 |
| 확장성 | 중소규모 | 대규모 |
| 네트워킹 | 기본적 | 강력하고 다양함 |
| 보안 | 기본 제공 | RBAC 등 강력한 보안 |
| 모니터링 | 기본적 | 다양한 도구 지원 |
| 커뮤니티 | 활발 | 매우 크고 활발 |
'인프라' 카테고리의 다른 글
| [Kubernetes] Minikube로 시작하는 쿠버네티스 - 설치부터 배포, 서비스까지 (0) | 2026.03.17 |
|---|---|
| [Kubernetes] 쿠버네티스(Kubernetes)란? 아키텍처와 리소스 (0) | 2026.03.17 |
| [Docker] Docker Networking이란? docker network driver 종류와 명령어 정리 (0) | 2026.03.17 |
| [Docker] Docker Volume이란? 컨테이너 데이터 관리와 mount (0) | 2026.03.16 |
| [Docker] Docker Compose란? 명령어와 yml 작성법 정리 (0) | 2026.03.16 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자