만약 관리하는 도커 머신, 컨테이너 갯수, 이미지가 수 없이 많아지면?
일일히 CLI창으로 관리 할 수 없기에, docker swarm이 필요하다.
도커스웜, 쿠버네티스와 같은 서비스를 오케스트레이터라고도 하는데, 말그대로 컨테이너들을 관리 해주는 것이다. 어떤 식이냐면,
등등의 일들을, 자동으로 관리해주는 것이다.
대표적인 오케스트레이션 소프트웨어들인데, 쿠버네티스와 도커스웜만 보면된다.
간단한 개발목적이면 쉬운 도커스웜도 좋은 선택이며,
쿠버네티스로도 도커에서 만든 container의 관리가 가능하다.
내가 만든 서비스를 .yml파일로 compose 후 CLI를 통해 뿌려서, application이 컨테이너로 분화된다. 오늘은 docker-machine으로 노드를 확보 후 작업할 것이다.
개발환경 : 윈도우 11, virtualbox
일단 도커머신 3개를 띄워보자.
하나는 swarm을 관리할 manager, 나머지는 노드들이다.
$ docker-machine create --driver virtualbox manager
$ docker-machine create --driver virtualbox worker1
$ docker-machine create --driver virtualbox worker2
윈도우에서 돌리다보니 오류가 발생해서 해결하느라 좀 걸렸다...ㅠ
ls로 machine들의 ip를 확인 해보자.
$ docker-machine ls
이제 manager 선정을 해주자.
$ docker-machine ssh {manager name} \ // \는 줄바꿈
$ docker swarm init --advertise-addr {manager ip}
ip에는 manager로 설정할 machine의 ip를 쓰면된다.
swarm이 만들어졌는데, 저 부분을 copy해놓자. (node간 소통할 port 2377은 열려있어야 함)
보안목적으로 저 토큰을 사용해서 node를 세울것이다.
방금 copy해놓은 명령어를 쳐보자. 당연히 worker라는 이름으로 생성한 노드에서 해야한다.
$ docker-machine ssh {workername} \
docker swarm join --token <token> <managerip>:2377
잘 들어갔다.
stack이란 개념 하나만 짚고 넘어가자!
컨테이너 및 이미지의 정보가 들어있는 .yml파일은 이제 user가 느끼기엔 application이다. 그리고 이제 .yml file을 Stack이라고 할 것이다.
우린 node들을 swarm으로 묶었고, 이제 swarm에 stack을 줄것이다.
이제 .yml에 swarm이 할 일을 명시하자.
worker2개에, nginx 웹서버 4개를 띄워볼 건데, manager는 제외할 것이다.
이 docker-compose.yml을 CLI에서 명령어를 치고있던 directory에 저장하면 준비가 끝난다.
$ docker-machine scp docker-compose.yml manager:~ //docker-compose.yml을 manager의 root directory에 copy
$ docker-machine ssh manager \
docker stack deploy -c docker-compose.yml helloswarm //manager가 관리할 yml file을 명시
$ docker-machine ssh manager docker stack ls //잘 돌아가나 check
※ scp를 사용할경우 아래와 같이 포트포워딩을 해줘야 한다.
잘 된것 같다. docker stack ls 로 돌고있는 stack을 확인해보자.
마지막으로 node에서 4개의 웹서버를 띄웠는데, 어떻게 돌고 있는지 확인해보자.
$ docker-machine ssh manager docker service ps helloswarm_webserver
2개씩 로드밸런싱이 잘된걸 볼 수있다.