클라우드/도커
[도커] 도커 13: 도커 스웜
KyuminKim
2024. 11. 23. 16:46
지난 시간에는 도커 컴포즈, 포트 포워딩을 알아봤다.
이번 시간에는 도커 스웜을 알아보자
도커 스웜?
지금까지는 도커가 설치되어 있는 하나의 컴퓨터(=하나의 도커 서버)에서 컨테이너를 관리했다
이제부터, 여러 개의 도커 서버를 두어 관리하자!
🙋♀️ 도커 스웜 장점
✔️컨테이너를 배치할 수 있는 호스트 컴퓨터의 영역이 넓어짐
✔️가용할 수 있는 모든 도커 서버를 묶어 클러스터로 관리
✔️서로 다른 물리적 위치에 있어도 클러스터로 관리 가능
클러스터
여러 대의 도커 서버를 둔다 했다!
이때, 하나로 관리하기 위해 클러스터로 묶어 관리한다
🙋♀️매니저 노드
도커 스웜을 전반적으로 관리
(워커 노드에 컨테이너를 어떻게 배치할 지 등을 고려)
🙋♀️워커 노드
컨테이너 실행과 관리 작업을 수행
🙋♀️전체적인 활용법
(1) 클러스터 구축
✔️한 호스트 컴퓨터를 매니저 노드라 부여하고, 클러스터 생성
✔️ 나머지 컴퓨터를 해당 클러스터에 join
(2) 매니저 노드에 서비스(컨테이너 묶음) 생성 명령 전달
✔️매니저 노드에서 알아서 워커 노드에 컨테이너 배치
(3) 매니저 노드에 서비스(컨테이너 묶음) 수 조정 명령 전달
도커 스웜 관련 용어
🙋♀️서비스
docker swarm의 기본 제어 단위로,
같은 이미지에서 생성된 컨테이너의 집합
🙋♀️태스크
서비스 내의 각 컨테이너
클러스터 구축 명령어
🙋♀️클러스터 구축 명령어
실행하는 컴퓨터를 마스터 노드로 만든다!
$ docker swarm init --advertise-addr [vm1의 ip주소]
🙋♀️클러스터에 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 이용 가능하도록 설정
지금까지 도커를 알아봤다.
다음 시간부터는 쿠버네티스를 알아보자!