※참고 : Docker Swarm Tutorial
※참고 : 백기선 - 도커 Swarm과 서비스
※참고 : 도커 공식문서 - 스웜



여러 머신에서의 배포

저번 포스팅에서는 단일 머신(로컬 컴퓨터)에서 스웜 모드를 이용하는 튜토리얼을 다뤘다. 이번에는 여러 머신에서 스웜을 이용하는 튜토리얼을 공부한다.



1. 여러 개의 가상 머신 띄우기

아래 명령어로 virtualbox 가상 머신을 두 개 띄운다.


docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2



2. 가상 머신의 ip 주소로 스웜 모드 명령 보내기

docker-machine ls로 매니저 노드로 만들 가상 머신의 ip를 확인한다.


docker-machine ls


도커 머신을 매니저 노드로 만들기 위해 해당 가상머신에서 docker swarm init 명령을 내린다. 이때 가상머신으로 명령을 보내기 위해 docker machine ssh 가상머신이름 "명령문"을 사용한다.

docker-machine ssh myvm1 "docker swarm init --advertise-addr <myvm ip>"



3. 작업자 노드 추가하기

2번에서 docker swarm init 명령어를 치면 아래 같은 안내문이 뜬다.

docker 스웜에 작업자를 추가하고 싶으면 docker swarm join --token ...토큰... ip주소:포트를 입력하라~~. 그대로 복사해서 입력하면 된다.

현재 도커 머신들 중 어느 것이 매니저 노드인지 확인하고 싶다면 아래 명령어를 입력한다. 별표 표시가 되어있는 것이 매니저 노드이다.


docker-machine ssh "docker node ls"


특정 노드를 스웜에서 해고하고 싶으면 docker-machine ssh 머신이름 "docker swarm leave"를 입력한다.





도커 머신으로 들어가기

앞에서는 계속 docker-machine ssh 명령어로 머신들에게 명령을 내렸다. 그런데 매번 치려니 귀찮다. 이 명령어를 입력하지 않고, 현재 쉘을 가상 머신의 도커와 연결시키려면 어떻게 할까?



1. 연결하기

eval $(docker-machine env myvm1)으로 해당 머신에 들어간 것처럼 명령을 내릴 수 있다.


eval $(docker-machine env myvm1)



2. 배포하고 노드 확인하기

스택을 배포하고 docker stack ps로 현재 스택을 확인한다.


docker stack deploy -c docker-compose.yml getstartedlab
docker stack ps


그럼 myvm1, myvm2 각각에 태스크가 할당된 것을 볼 수 있다. 참고로 매니저 노드에게도 태스크가 할당 된다. 즉, 매니저, 작업자 노드 둘다에게 배포할 수 있다.


출처 : 백기선 개발자님 유튜브


스터디 질문! 위 사진은 유튜브에서 가져왔습니다. myvm1은 매니저 노드입니다. 매니저 노드에도 태스크가 할당되어 있습니다. 할당만 되고 직접 실행은 하지 않는 걸까요? 뭘까요?



3. 확인하기

curl -4 http://localhost:4000를 커맨드에 입력하거나 직접 브라우저에 myvm1 또는 myvm2의 아이피 주소를 입력하면 앱을 확인할 수 있다.



4. 도커 스택 내리기


docker stack rm getstartedlab



5. 연결시킨 가상머신 떼어내기

그리고 아까 연결시켰던 환경을 떼어내려면 eval $(docker-machine env -u) 명령어를 실행한다.


eval $(docker-machine env -u)



6. 가상 머신 정지시키기

가상 머신도 내리려면?


docker-machine stop myvm1
docker-machine stop myvm2