[Docker] docker swarm

<div>elop·2022년 4월 23일
0

Docker swarm?

만약 관리하는 도커 머신, 컨테이너 갯수, 이미지가 수 없이 많아지면?
일일히 CLI창으로 관리 할 수 없기에, docker swarm이 필요하다.
도커스웜, 쿠버네티스와 같은 서비스를 오케스트레이터라고도 하는데, 말그대로 컨테이너들을 관리 해주는 것이다. 어떤 식이냐면,

  • scaling
  • management
  • networking
  • load balancing

등등의 일들을, 자동으로 관리해주는 것이다.


대표적인 오케스트레이션 소프트웨어들인데, 쿠버네티스와 도커스웜만 보면된다.
간단한 개발목적이면 쉬운 도커스웜도 좋은 선택이며,
쿠버네티스로도 도커에서 만든 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 설정

이제 manager 선정을 해주자.

$ docker-machine ssh {manager name} \						// \는 줄바꿈
$ docker swarm init --advertise-addr {manager ip}

ip에는 manager로 설정할 machine의 ip를 쓰면된다.

swarm이 만들어졌는데, 저 부분을 copy해놓자. (node간 소통할 port 2377은 열려있어야 함)
보안목적으로 저 토큰을 사용해서 node를 세울것이다.


node 설정

방금 copy해놓은 명령어를 쳐보자. 당연히 worker라는 이름으로 생성한 노드에서 해야한다.

$ docker-machine ssh {workername} \
docker swarm join --token <token> <managerip>:2377

잘 들어갔다.


++Stack?

stack이란 개념 하나만 짚고 넘어가자!
컨테이너 및 이미지의 정보가 들어있는 .yml파일은 이제 user가 느끼기엔 application이다. 그리고 이제 .yml file을 Stack이라고 할 것이다.
우린 node들을 swarm으로 묶었고, 이제 swarm에 stack을 줄것이다.


deployment

이제 .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개씩 로드밸런싱이 잘된걸 볼 수있다.

profile
기록장

0개의 댓글