도커 스웜
- 여러 대의 컴퓨터 위에서 하나의 애플리케이션을 구성하는 서비스를 복수개의 컨테이너로 띄우고
이 컨테이너간에 통신하고 데이터를 주고 받게할 수 있도록 오케스트레이션하는 것 - 하나의 거대한 애플리케이션에 굉장히 많은 컨테이너들이 존재하며,
이들이 유기적으로 동작하는 모습을 Swarm(떼, 군락)에서 차용
컨테이너 오케스트레이션
- 컨테이너 기반의 애플리케이션의 배포, 관리(로드밸런싱, 모니터링 등) , 스케일링, 네트워크 설정 등을 자동화하는 것
- Docker Swarm, Kubernetes 등의 오케스트레이션 툴이 있음
도커 스웜 개요
- 컨테이너 오케스트레이션을 위한 툴: 하나의 서비스를 실행하는 여러 개의 도커 컨테이너를 관리
- 도커를 실행하고 클러스터에 join되는 머신 그룹
- 여러 개의 도커 호스트로 구성되어 있고 매니저-워커 노드로 동작
- Manager: 멤버쉽과 딜리게이션을 관리
- Workers(nodes): 스웜 서비스 실행
https://www.slideshare.net/Docker/docker-swarmmikegoelzermvmeetup45minworkshop-02242016-1-58805924
도커 스웜 서비스
- 태스크: 스웜 서비스의 일부인 실행 중인 컨테이너, 스웜매니저에 의해 관리되는 것
- 노드: 스웜에 의해 실행되는 도커 엔진 인스턴스
- 매니저 노드: 워커 노드들에게 태스크를 할당
- 워커 노드: 매니저 노드로 부터 할당된 태스크를 전달받아 실행함
- 예: 스웜 매니저는 nginx 서비스를 관리하고, 워커 노드 3개를 띄워 nginx 컨테이너를 실행하게 한다.
https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/
스웜 실습
매니저/워커 노드 생성
매니저 노드 1개와 워커 노드 2개를 생성
$ docker-machine create --driver virtualbox manager
$ docker-machine create --driver virtualbox worker1
$ docker-machine create --driver virtualbox worker2
도커 머신 목록 확인
$ docker-machine ls
도커 머신 ip 확인
$ docker-machine ip manager
$ docker-machine ip worker1
$ docker-machine ip worker2
도커 머신 ssh 접속
$ docker-machine ssh manager
$ docker-machine ssh worker1
$ docker-machine ssh worker2
매니저 노드 지정
- 매니저 머신에서 도커 스웜을 초기화하고, 토큰을 발급받는다. 스웜에게 매니저 머신이 뭔지 알려주는 역할도 함
- 명령어 실행 뒤 나타나는 토큰을 저장해서, 워커 노드를 스웜에 조인시 사용한다
$ docker-machine ssh {manager name} \
> docker swarm init —advertise-add {manager ip}
매니저 노드로 스웜 노드 관리하기
$ docker-machine ssh manager \
> docker node —help
$ docker-machine ssh manager \
> docker node ls
워커 노드 지정
- 워커 머신에서는 스웜 조인을 설정한다: 토큰을 기준으로 스웜에 조인하게 됨
$ docker-machine ssh {worker name} \
> docker swarm join —token <token> <manager ip>:2377
도커 스택
- 스웜은 컨테이너를 직접 생성하지 않고, 스웜 서비스를 등록하여 오케스트레이션 태스크를 수행
- 모든 스웜 객체는 stack 파일 안에 기록해서 관리하여 스웜 관리와 생성/삭제를 쉽게 함
태스크 디플로이
docker-compose.yml 파일 생성
version: “3.8”
services:
webserver:
image: nginx:latest
deploy:
replicas: 4 # 워커 노드 4개
placement:
constraints: [node.role != manager] # 매니저 노드는 웹서버 띄우지마~
ports:
- 8080:80
docker-compose.yml 파일을 매니저로 복사
$ docker-machine scp docker-compose.yml manager:~
매니저에서 애플리케이션 스택을 디플로이
$ docker-machine ssh manager \
> docker stack deploy -c docker-compose.yml helloswarm
스택 디플로이 상태를 확인
$ docker-machine ssh manager \
> docker stack ls
태스크 모니터링 관련 명령어
- docker service ls # helloswarm_webserver 서비스가 떠있다
- docker service ps helloswarm # 없다
- docker service ps helloswarm_webserver # 워커 노드 4개가 출력
스웜 삭제, 매니저/워커 노드 삭제
태스크 지우기
$ docker-machine ssh manager \
> docker stack rm helloswarm
워커 노드 지우기
$ docker-machine ssh {worker name} \
> docker swarm leave
매니저 노드 지우기
$ docker-machine ssh {manager name} \
> docker swarm leave —force
도커 머신 지우기
$ docker-machine stop
$ docker-machine rm
'인프라' 카테고리의 다른 글
카프카 스키마 레지스트리 구성하기 (0) | 2023.09.22 |
---|---|
카프카 클러스터 구성하기 (0) | 2023.09.17 |
10. 도커 스토리지 (0) | 2021.04.04 |
11. Docker Compose (0) | 2021.04.03 |
10. 도커 이미지 빌드 & 푸시 실습 (0) | 2021.03.30 |