소프트웨어 개발/Docker

🐳 Docker 강의 8강: Docker Swarm 기본 클러스터링

브라더댄 2025. 1. 27. 01:17
728x90
반응형
SMALL

이전 강의에서 Docker 배포 전략과 Private Registry 등을 배웠다면, 이제는 컨테이너 오케스트레이션의 한 축인 Docker Swarm을 활용해 클러스터링서비스 스케일링을 살펴봅니다.

🚀 강의 목표

  • Docker Swarm의 개념과 구성 방식을 이해합니다.
  • 단일 머신(혹은 여러 머신)에서 Swarm 클러스터를 직접 구축해봅니다.
  • Swarm 서비스(Service) 생성, 스케일링, 업데이트 과정을 실습합니다.
  • Swarm 모드 운영 중 발생할 수 있는 문제를 Tip 형태로 함께 살펴봅니다.

1. Docker Swarm이란?

Docker Swarm은 Docker가 자체적으로 제공하는 컨테이너 오케스트레이션 솔루션입니다.

  • 주요 역할
    • 다수의 Docker 데몬을 하나의 가상화된 클러스터로 묶어 관리.
    • 원하는 만큼 서비스를 확장(스케일 아웃)하거나, 장애 발생 시 다른 노드로 서비스를 재배치(내결함성)할 수 있음.
  • **Kubernetes(K8s)**와 마찬가지로 오케스트레이션을 제공하지만, 비교적 설정이 간단하고 Docker CLI와의 통합이 잘 되어 있습니다.

Tip: Swarm vs Kubernetes

  • Kubernetes는 더욱 강력하고 풍부한 생태계를 제공하지만, 설정이 복잡합니다.
  • Swarm은 Docker CLI 기반이며, 학습 곡선이 낮습니다. 소규모 환경이나 단순한 클러스터링 용도라면 Swarm도 훌륭한 선택입니다.

2. Swarm 클러스터 기본 구성

2.1 주요 개념

  1. Manager 노드: 클러스터 상태 및 서비스 배포를 총괄.
  2. Worker 노드: 실제 컨테이너를 실행하고, 워크로드를 담당.

2.2 단일 머신(로컬)에서 Swarm 모드 활성화

docker swarm init --advertise-addr <호스트_IP>
  • 결과: 터미널에 docker swarm join --token ... 명령어가 표시되며, Worker 노드로 합류할 수 있는 토큰이 발급됩니다.
  • 단일 머신 테스트 시 <호스트_IP>를 127.0.0.1 또는 현재 PC의 내부 IP로 설정할 수 있습니다.

Tip: VirtualBox나 Docker Desktop

  • Windows/macOS에서 Docker Desktop을 사용할 경우, docker swarm init로 로컬 Swarm 클러스터 구성이 가능합니다.
  • 여러 VM(Ubuntu 등)을 띄워 네트워크로 묶어서 실제 다중 노드 클러스터를 구성하는 연습도 좋습니다.

3. Worker 노드 추가 (멀티 노드 구성 시)

3.1 Worker 노드 합류

  • Manager 노드에서 발급된 join 토큰을 Worker 노드에서 실행:
    docker swarm join --token SWMTKN-1-xxxx <Manager_IP>:2377
    
    • <Manager_IP>: Manager가 구동 중인 호스트 IP
    • 2377: Swarm이 사용하는 기본 포트.

3.2 노드 상태 확인

docker node ls
  • Manager 노드에서 위 명령어를 실행해 보면, Ready 상태의 Worker 노드를 확인할 수 있습니다.

Tip: 노드가 잘 등록되지 않는 경우

  1. 방화벽 설정 확인 (TCP 2377, 7946, 4789 포트 등).
  2. Manager와 Worker가 같은 서브넷에 있거나, 필요한 포트를 열어둬야 합니다.

4. Swarm 서비스(Service) 배포

4.1 간단한 웹 서비스 예시

docker service create --name my-web \
  --publish 8080:80 \
  --replicas 2 \
  nginx
  • 서비스명: my-web
  • 포트 매핑: 8080(호스트) → 80(컨테이너)
  • 복제 수: --replicas 2 → 2개의 컨테이너 실행
  • 이미지: nginx

4.2 서비스 상태 확인

docker service ls
  • REPLICAS가 2/2로 표시되면, 원하는 컨테이너 수가 정상적으로 실행 중임을 의미합니다.

Tip: 도메인 기반 서비스 라우팅
Swarm 모드에서는 --publish를 사용해 로드밸런싱도 가능하지만, 복잡한 호스트 이름별 라우팅은 Traefik, Nginx Proxy Manager 같은 별도 리버스 프록시를 사용하여 처리하는 편이 좋습니다.


5. Swarm 서비스 스케일링, 업데이트

5.1 스케일링

docker service scale my-web=5
  • my-web 서비스의 컨테이너 복제 수를 5개로 늘립니다.
  • Swarm은 자동으로 클러스터 내 남는 노드를 찾아 컨테이너를 분산 배치합니다.

5.2 롤링 업데이트

docker service update --image nginx:1.21 my-web
  • Nginx 버전을 nginx:1.21로 업데이트.
  • 기본적으로 롤링 업데이트 방식으로, 하나씩 새 컨테이너를 띄운 뒤 이전 컨테이너를 내리는 식으로 진행합니다.

Tip: 롤백
서비스 업데이트 후 문제가 생기면, docker service update --rollback my-web 명령으로 이전 버전으로 되돌릴 수 있습니다.


6. Swarm 네트워크(Overlay Network)

6.1 Overlay 네트워크 생성

docker network create -d overlay my-overlay
  • Swarm 클러스터 전역에서 사용할 수 있는 overlay 네트워크 생성.

6.2 서비스에 연결

docker service create --name redis \
  --network my-overlay \
  redis
  • my-overlay 네트워크에 연결된 redis 서비스를 생성.
  • 같은 네트워크에 연결된 다른 서비스는 redis라는 서비스 이름으로 접근 가능합니다.

Tip: Overlay 네트워크 포트
노드 간 통신에 7946/udp, 4789/udp 등이 사용됩니다. 방화벽이 막혀 있다면 설정을 해제해야 서비스 간 통신이 정상적으로 이루어집니다.


7. Node 장애 대처 및 고가용성(HA)

  1. Manager 장애
    • Swarm은 Manager 노드가 여러 대 있으면, 리더 선출 방식을 통해 자동으로 마스터를 재선출합니다.
    • Manager 노드는 홀수(1, 3, 5...) 대로 운영하는 것을 권장합니다(Quorum 개념).
  2. Worker 장애
    • Worker 노드 장애 시, 그 노드에서 실행 중이던 컨테이너가 다른 노드에서 자동으로 재배치됩니다(Replica 보장).

Tip: Manager 리더

  • docker node ls 로 보면 어떤 노드가 LEADER 인지 표시됩니다.
  • Manager 노드가 1대뿐이라면, 그 노드가 다운되면 Swarm 전체 관리가 불가능해지므로 적어도 3대의 Manager 노드를 구성하는 것이 안전합니다.

📝 정리

  1. Swarm 모드는 Docker의 내장 오케스트레이션 기능으로, 간단한 클러스터링과 서비스 확장을 손쉽게 구현합니다.
  2. docker swarm init → docker swarm join → docker service create 등의 과정을 통해 다중 노드 환경에서 컨테이너를 스케일링하고 롤링 업데이트를 수행할 수 있습니다.
  3. 고가용성과 네트워크 구성을 위해 Manager 노드 다중화, Overlay 네트워크 활용 등이 필수적입니다.

다음 강의 예고

다음 9강에서는 Kubernetes(쿠버네티스)와 Docker의 연계 또는 Swarm과 K8s의 비교를 다뤄볼 예정입니다.

  • Kubernetes의 주요 개념(Pod, Service, Deployment)
  • Docker 이미지로 Kubernetes 클러스터 배포
  • Helm, Ingress, etc. 의 확장 생태계

Docker Swarm으로 쉽고 빠르게 컨테이너 클러스터 환경을 맛본 뒤, 더 복잡한 스케일이 필요한 경우 Kubernetes도 고려해 보세요! 😊


더 알아보기: Docker 공식 문서 - Swarm

728x90
반응형
LIST