6.1 Docker Swarm
의 기본 개념
Docker Swarm
은 Docker가 제공하는 컨테이너 오케스트레이션 내장 시스템이야. 이걸로 Docker 호스트 클러스터를 만들고, 관리하고, 확장할 수 있지. 여러 호스트를 하나의 논리적 호스트로 바꿔서 컨테이너를 실행할 수 있게끔 만들어줘. Swarm은 자동으로 작업을 노드들 간에 분배하고, 편리함과 장애 복구를 보장하지. 이번 강의에서는 Docker Swarm
의 주요 구성 요소와 관리 기본 명령어를 살펴볼 거야.
Docker Swarm
의 기본 개념:
- 클러스터 (Swarm): 여러 Docker 호스트를 하나의 클러스터로 묶은 그룹.
- 매니저 (Managers): 클러스터를 관리하고 작업을 워커 노드에 분배하는 노드들.
- 워커 노드 (Workers): 작업을 수행하고 컨테이너를 실행하는 노드들.
- 서비스 (Services): 애플리케이션의 논리적 표현으로, 어떤 작업을 수행할지와 몇 개의 컨테이너 인스턴스를 실행할지를 설명해.
- 작업 (Tasks): 서비스의 인스턴스가 되는 개별 컨테이너들.
Docker Swarm
의 아키텍처:
Docker Swarm은 매니저와 워커 노드에 기반한 아키텍처를 사용해. 매니저는 클러스터의 상태를 관리하고, 워커 노드들은 작업을 실행해.
매니저:
- 클러스터 상태와 구성을 관리해.
- 작업을 워커 노드에 분배해.
- (복수의 매니저가 있을 경우) 장애 복구와 고가용성을 보장해.
워커 노드:
- 매니저가 할당한 작업을 수행해.
- 지정된 작업에 따라 컨테이너를 실행해.
Docker Swarm
의 기본 명령어:
-
docker swarm init
: 새로운 Swarm 클러스터 초기화. -
docker swarm join
: 기존 클러스터에 노드 추가. -
docker node ls
: 클러스터 내 노드 리스트 확인. -
docker service create
: 새로운 서비스 생성. -
docker service ls
: 실행 중인 서비스 리스트 확인. -
docker service scale
: 특정 수의 인스턴스로 서비스 확장. -
docker service rm
: 클러스터에서 서비스 제거.
Docker Swarm
을 사용하면 분산 시스템에서 애플리케이션을 쉽게 관리할 수 있어. 장애 복구, 확장성, 배포 편의성을 보장하지.
6.2 Docker Swarm
클러스터 생성하기
Docker Swarm 클러스터 생성 및 관리
1단계: 클러스터 초기화
첫 번째 호스트(매니저)에서 다음 명령어를 실행하세요:
docker swarm init --advertise-addr <MANAGER_IPl>
이 명령은 새로운 Swarm 클러스터를 초기화하고 현재 노드를 매니저로 설정하며 작업 노드를 연결하기 위한 명령어를 출력합니다.
2단계: 작업 노드 연결
다른 호스트에서 docker swarm init
명령 실행 시 출력된 명령을 실행하여 클러스터에 연결하세요:
docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377
여기서:
<SWARM_TOKEN>
: 클러스터에 연결하기 위한 토큰 (docker swarm init
명령에서 제공됨).<MANAGER_IP>
: 매니저 노드의 IP 주소.
3단계: 노드 확인
클러스터의 모든 노드를 보려면 다음 명령어를 사용하세요:
docker node ls
이 명령은 모든 노드의 목록, 역할, 상태 및 가용성을 보여줍니다.
docker node ls
명령의 출력 예제
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
qwertyuiop12345 manager-node Ready Active Leader
asdfghjkl67890 worker-node1 Ready Active
zxcvbnm09876 worker-node2 Ready Active
열에 대한 설명:
- ID: 노드의 고유 식별자.
- HOSTNAME: 노드가 실행 중인 호스트의 이름.
- STATUS: 노드의 현재 상태(예: Ready).
- AVAILABILITY: 노드의 가용성(예: Active).
- MANAGER STATUS: 노드가 매니저인지(예: Leader, Reachable) 또는 작업 노드인지(비어 있음)를 표시합니다.
이제 Docker Swarm 클러스터가 설정되어 애플리케이션을 생성하고 확장할 수 있습니다.
6.3 Docker Swarm
관리
Docker Swarm
에서 서비스 관리
1. 서비스 생성
지정된 수의 복제본으로 실행될 서비스를 생성하세요:
docker service create --name my_web --replicas 3 -p 8080:80 nginx
이 예제에서는 my_web
라는 서비스를 생성하며, Nginx의 3개의 인스턴스를 실행합니다. 컨테이너는 80번 포트를 호스트의 8080번 포트에 게시합니다.
2. 서비스 보기
클러스터에서 실행 중인 모든 서비스를 보려면 다음 명령어를 사용하세요:
docker service ls
docker service ls
명령어 출력 예제
ID NAME MODE REPLICAS IMAGE
ab12345 my_web replicated 3/3 nginx:latest
3. 서비스 확장
서비스의 인스턴스(복제본) 수를 변경하려면 docker service scale
명령어를 사용하세요:
docker service scale my_web=5
이제 my_web
서비스는 5개의 인스턴스를 가지게 됩니다.
4. 서비스 업데이트
새 버전으로 서비스 이미지를 업데이트하려면 docker service update
명령어를 사용하세요:
docker service update --image nginx:latest my_web
높은 가용성 보장
Docker Swarm은 다음을 통해 높은 가용성을 지원합니다:
- 작업 분배: 장애 발생 시 컨테이너를 자동으로 복구하기 위해 클러스터의 노드 간 작업을 분배합니다.
- 다중 매니저 지원: 쿼럼 문제를 피하기 위해 홀수 개의 매니저(예: 3개 또는 5개)를 권장합니다.
- 복제본 사용: 각 서비스에 여러 복제본을 설정하여 내결함성을 강화합니다.
쿼럼 개념
쿼럼은 대다수 노드가 특정 작업(예: 데이터 기록이나 리더 선택)에 동의해야 실행 가능한 것으로 간주됩니다. 예를 들어, 5개의 노드로 구성된 클러스터에서는 쿼럼이 3개의 노드가 됩니다.
유용한 팁!
매니저를 서로 다른 물리적 또는 클라우드 서버에 배치하여 동시에 장애가 발생할 위험을 최소화하세요.
6.4 Docker Swarm
를 위한 Docker Compose
구성 예제
Docker Swarm
에서 Docker Compose
를 사용하면 멀티 컨테이너 애플리케이션 관리를 간소화할 수 있어.
docker-compose.yml
파일 예제
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080-8090:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
networks:
- my_overlay_network
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: example
deploy:
replicas: 1
restart_policy:
condition: on-failure
networks:
- my_overlay_network
networks:
my_overlay_network:
driver: overlay
Swarm
에서 Docker Compose
스택 실행하기
Docker Swarm
에 스택을 배포하려면 아래 명령어를 사용하면 돼:
docker stack deploy -c docker-compose.yml mystack
스택 보기
배포된 스택을 보려면:
docker stack ls
스택 내 서비스 보기
docker stack services mystack
GO TO FULL VERSION