클라우드/도커

[도커] 도커 13: 도커 스웜

KyuminKim 2024. 11. 23. 16:46

지난 시간에는 도커 컴포즈, 포트 포워딩을 알아봤다.

 

이번 시간에는 도커 스웜을 알아보자


도커 스웜?

지금까지는 도커가 설치되어 있는 하나의 컴퓨터(=하나의 도커 서버)에서 컨테이너를 관리했다

 

이제부터, 여러 개의 도커 서버를 두어 관리하자!

 

 

🙋‍♀️ 도커 스웜 장점

✔️컨테이너를 배치할 수 있는 호스트 컴퓨터의 영역이 넓어짐
✔️가용할 수 있는 모든 도커 서버를 묶어 클러스터로 관리 

✔️서로 다른 물리적 위치에 있어도 클러스터로 관리 가능

 

클러스터

여러 대의 도커 서버를 둔다 했다!

이때, 하나로 관리하기 위해 클러스터로 묶어 관리한다

 

🙋‍♀️매니저 노드

 도커 스웜을 전반적으로 관리

(워커 노드에 컨테이너를 어떻게 배치할 지 등을 고려)
 

🙋‍♀️워커 노드 

컨테이너 실행과 관리 작업을 수행

 

🙋‍♀️전체적인 활용법

(1) 클러스터 구축
✔️한 호스트 컴퓨터를 매니저 노드라 부여하고클러스터 생성

✔️ 나머지 컴퓨터를 해당 클러스터에 join

 

(2) 매니저 노드에 서비스(컨테이너 묶음) 생성 명령 전달

✔️매니저 노드에서 알아서 워커 노드에 컨테이너 배치

 

(3) 매니저 노드에 서비스(컨테이너 묶음) 조정 명령 전달

 


도커 스웜 관련 용어

🙋‍♀️서비스

 docker swarm의 기본 제어 단위로,
 같은 이미지에서 생성된 컨테이너의 집합
 

🙋‍♀️태스크

서비스 내의 각 컨테이너

클러스터 구축 명령어

🙋‍♀️클러스터 구축 명령어 

실행하는 컴퓨터를 마스터 노드로 만든다!

$ docker swarm init --advertise-addr [vm1의 ip주소]

init 명령어 실행

 

🙋‍♀️클러스터에 join하는 명령어 

실행하는 컴퓨터를 워커노드로 만든다!

$ docker swarm join --token (token) 192.168.0.21:2377
# docker swarm join --token SWMTKN-1-24toeh4pbiiwiv9pf76d3yb75si38bkwyuy07flq87d96aky7o-3p71cony06frudpyl86r4hsvi 192.168.0.21:2377

docker swarm init에 나왔던 토큰을 그대로 복사 붙여넣는다!


기타 도커스웜 명령어

🙋‍♀️도커 스웜 service 조회 

$ docker node ls                                   # 현재 클러스터에 존재하는 모든 node 확인
$ docker service ls                                # 클러스터에 존재하는 모든 service 확인
$ docker service ps (service명)                     # 클러스터에 존재하는 특정 service를 지칭하여 정보 확인
$ docker service inspect (service명)                # json 형식으로 service 상세정보 확인 
$ docker service inspect --pretty (service명)       # 한 눈에 보기 좋은 형태로 service 상세정보 확인
replicas 옵션
- 컨테이너의 수를 지정하여 서비스 생성
- 어떠한 노드에 컨테이너가 생성되는지는 마스터 노드의 판단
- docker service ps (서비스명) 으로 어떤 노드에 생성되었는지 확인 가능
 
global 모드 옵션
- docker swarm 클러스터 내에 사용 가능한 모든 노드에 컨테이너를 반드시 하나씩 생성
- 사용 예시: 스웜 클러스터 모니터링 (에이전트 컨테이너 생성)

 

 

🙋‍♀️도커 스웜 삭제

docker service rm (service ID)        # 서비스 삭제

 

 

🙋‍♀️도커 스웜 서비스 생성

$ docker service create -p 8080:80 --name nginx nginx:latest 
	# 포트 포워딩(-p), 이름(--name) 지정
    
$ docker service create --replicas 3 --name nginx2 nginx:latest     
	# 하나의 서비스 생성 시 3개의 nginx 컨테이너(태스크) 생성 

$ docker service create --mode global --name nginx3 nginx:latest
	# global 모드로 nginx3 서비스 생성 
	# 각 노드에 컨테이너 하나씩 생성

 

--replicas 옵션으로 몇 개의 컨테이너를 생성할지 지정할 수 있다

이때 컨테이너 생성 위치(어떤 워커 노드에 배포될까?)

는 마스터 노드의 재량이다!

 

⚠️(주의) docker service create 명령어는 마스터 노드에서만 실행 가능하다!


도커 스웜 service 설정 변경

scale

$ docker service scale [서비스이름]=[REPLICAS수] # replica 수 변경
 

update

$ docker service update                                              
$ docker service update —image update nginx:1.11 myweb2  # 이미지 변경
# 이미지, 마운트, 네트워크, CPU할당 등 설정 변경 가능
# 롤링 업데이트 진행 가능

 

rollback

$ docker service rollback
$ docker service rollback myweb2                                   # rolling update한 것 다시 돌리기 (이미지 변경 전으로 돌아감)

 

🙋‍♀️롤링 업데이트?

- 사용자들이 항상 application을 이용할 수 있도록 가용성을 보장하는 업데이트 
- 점진적으로 컨테이너를 새로운 버전으로 업데이트 함으로써 항상 application 이용 가능하도록 설정

지금까지 도커를 알아봤다.

다음 시간부터는 쿠버네티스를 알아보자!