소개
Docker Swarm 은 개발자가 여러 Docker 호스트를 통합되고 확장 가능한 인프라로 변환할 수 있는 강력한 컨테이너 오케스트레이션 솔루션입니다. 이 포괄적인 튜토리얼은 Docker Swarm 클러스터를 생성, 구성 및 관리하는 데 대한 심층적인 통찰력을 제공하며, 필수 개념, 노드 유형, 서비스 배포 전략 및 강력한 컨테이너화된 환경 구축을 위한 최상의 관행을 다룹니다.
Docker Swarm 기본 개념
Docker Swarm 소개
Docker Swarm 은 Docker 환경을 위한 네이티브 클러스터링 및 컨테이너 오케스트레이션 솔루션입니다. 개발자는 Docker 노드 클러스터를 생성 및 관리하여 여러 Docker 호스트를 하나의 가상 Docker 호스트로 변환할 수 있습니다.
핵심 개념
Swarm 클러스터 아키텍처
graph TD
A[Swarm 매니저] --> B[워커 노드 1]
A --> C[워커 노드 2]
A --> D[워커 노드 3]
Swarm 노드 유형
| 노드 유형 | 설명 | 책임 |
|---|---|---|
| 매니저 노드 | 클러스터 상태를 제어 | 오케스트레이션, 스케줄링 |
| 워커 노드 | 컨테이너 작업을 실행 | 서비스 실행 |
Swarm 클러스터 초기화
## 기본 노드에서 Swarm 초기화
docker swarm init --advertise-addr 192.168.1.100
## 워커 노드 가입 토큰 생성
docker swarm join-token worker
## 워커 노드를 클러스터에 가입
docker swarm join --token < 토큰 > 192.168.1.100:2377
주요 기능
- 분산 설계
- 선언적 서비스 모델
- 확장 및 롤링 업데이트
- 서비스 검색
- 로드 밸런싱
- 보안 통신
서비스 배포 예제
## 복제된 서비스 생성
docker service create --replicas 3 --name web nginx
## 서비스 확장
docker service scale web=5
## 서비스 업데이트
docker service update --image nginx:latest web
클러스터 구성
Swarm 클러스터 토폴로지
graph TD
A[매니저 노드] --> B[워커 노드 1]
A --> C[워커 노드 2]
A --> D[워커 노드 3]
노드 초기화 전략
매니저 노드 설정
## 기본 매니저에서 Swarm 클러스터 초기화
docker swarm init --advertise-addr 192.168.1.100
## 클러스터 가입 토큰 보기
docker swarm join-token manager
docker swarm join-token worker
워커 노드 구성
## 워커 노드를 클러스터에 가입
docker swarm join \
--token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxx \
192.168.1.100:2377
클러스터 구성 매개변수
| 매개변수 | 설명 | 기본값 |
|---|---|---|
| Advertise Address | 노드의 네트워크 인터페이스 | 기본 IP |
| Listen Port | Swarm 통신 포트 | 2377 |
| Node Labels | 노드 선택을 위한 메타데이터 | 없음 |
고급 클러스터 구성
## 사용자 정의 노드 레이블 추가
docker node update --label-add type=frontend worker1
## 노드 가용성 설정
docker node update --availability drain worker2
네트워크 구성
## 오버레이 네트워크 생성
docker network create \
--driver overlay \
--subnet 10.0.0.0/24 \
my-network
서비스 관리
서비스 배포 워크플로우
graph LR
A[서비스 생성] --> B[컨테이너 배포]
B --> C[서비스 확장]
C --> D[서비스 업데이트]
D --> E[성능 모니터링]
기본 서비스 생성
## 3개의 복제본으로 nginx 서비스 배포
docker service create \
--name web-service \
--replicas 3 \
--publish 80:80 \
nginx:latest
서비스 구성 옵션
| 옵션 | 설명 | 예시 |
|---|---|---|
| --replicas | 컨테이너 인스턴스 수 | 3 |
| --update-parallelism | 동시 업데이트 수 | 2 |
| --constraint | 노드 배치 규칙 | node.labels.type==frontend |
서비스 확장 전략
## 동적으로 서비스 확장
docker service scale web-service=5
## 수평 확장
docker service update \
--replicas-max-per-node 2 \
web-service
로드 밸런싱 구성
## 사용자 지정 로드 밸런싱으로 서비스 생성
docker service create \
--name api-service \
--replicas 4 \
--publish mode=host,target=8080,published=80 \
--update-delay 10s \
api-image:latest
서비스 업데이트 메커니즘
## 롤링 업데이트 전략
docker service update \
--image nginx:latest \
--update-parallelism 2 \
--update-delay 10s \
web-service
서비스 모니터링
## 활성 서비스 목록
docker service ls
## 특정 서비스 검사
docker service ps web-service
요약
Docker Swarm 을 마스터함으로써 개발자 및 시스템 관리자는 분산 시스템에서 컨테이너화된 애플리케이션을 효과적으로 관리할 수 있습니다. 이 튜토리얼은 클러스터 초기화, 노드 토폴로지 구성, 서비스 배포, 서비스 디스커버리, 로드 밸런싱 및 안전한 통신과 같은 고급 기능 활용을 위한 주요 기술을 보여줍니다. 이러한 기본 원리를 이해하면 팀은 확장 가능하고 강력한 컨테이너 인프라를 향상된 운영 효율성으로 구축할 수 있습니다.



