본문 바로가기
Docker

[Docker] Docker-swarm 구축 및 테스트

by moveho 2023. 5. 29.

도커 스웜 (docker-swarm)은 도커에서 공식적으로 만든 오케스트레이션 docker-swarm 입니다. 호스트 서버의 컨테이너들을 배포 관리를 위한 툴입니다. 쿠버네티스를 대신 도커에서 만든 컨테이너 관리를 위한 툴입니다.

 

[docker-swarm 구축 개요]

3대의 ubuntu 서버를에 docker-swarm cluster 구축해 보는 것이 목표입니다.

 docker-swarm-master>                            <docker-swarm-node1>                        <docker-swarm-node2>

    192.168.56.111                                             192.168.56.112                                     192.168.56.113

 

1.docker-swarm cluster 생성

docker swarm init 명령어를 통해서 swarm 클러스터를 초기화 시켜줍니다. --advertise-addr 옵션을 통해 다른 도커 서버가 manager 노드에 접근할 있도록 매니저 노드 ip주소를 입력합니다.

 

기본적으로 클러스터 관리에 대한 통신 포트는 2377 TCP 포트를 사용하고, Node 통신에는 7946 포트를 사용합니다. 그리고 overlay 네트워크에서 오고가는 트래픽에 대해서는 4789 UDP 사용합니다.

 

kevin@docker-swarm-master:~$ docker swarm init --advertise-addr 192.168.56.111:2377
Swarm initialized: current node (8kkspf9mide6mdhnmu7qsxmw4) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-6c7vnsgf***************kt90qc3lt08-3qkzx2geiz2i68tepilfqee55 192.168.56.111:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

 

2.docker-swarm worker node 추가

위에서 발급된 토큰을 가지고 worker node 삼을 서버에 가서 join 해준다.

kevin@docker-swarm-node1:~$ docker swarm join --token SWMTKN-1-6c***********************y7h2j47kt90qc3lt08-3qkzx2geiz2i68tepilfqee55 192.168.56.111:2377
This node joined a swarm as a worker.
kevin@docker-swarm-node2:~$ docker swarm join --token ********************88d801w7jcoiyndy7h2j47kt90qc3lt08-3qkzx2geiz2i68tepilfqee55 192.168.56.111:2377
This node joined a swarm as a worker.

node 추가 master node에서 정상적으로 node 추가 되었는지 확인합니다.

 

kevin@docker-swarm-master:~$ docker node ls
ID                            HOSTNAME              STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
8kkspf9mide6mdhnmu7qsxmw4 *   docker-swarm-master   Ready     Active         Leader           20.10.22
qdvs83tuqm1uc01lpdjfuoydv     docker-swarm-node1    Ready     Active                          20.10.22
xlm5m74wsus22f6xg1xsui81n     docker-swarm-node2    Ready     Active                          20.10.22

 

3.서비스 생성

docker service create 명령어를 통해 docker swarm mode 컨테이너를 실행시킬 있습니다.

예로 아파치 이미지를 불러와서 실행시켜보겠습니다.

kevin@docker-swarm-master:~$ sudo docker service create --name apache -p 80:80 httpd
[sudo] password for kevin:
cm3121l8ewmxj5666sn1h8wb1
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged
kevin@docker-swarm-master:~$ docker service ps apache
ID             NAME       IMAGE          NODE                  DESIRED STATE   CURRENT STATE            ERROR     PORTS
tno1vb8gxyuq   apache.1   httpd:latest   docker-swarm-master   Running         Running 10 seconds ago

해당 서버로 브라우저 접속 정상 동작하는 것을 확인할 있습니다.

 

4.서비스 확장

 

쿠버네티스의 deploy replicas 비슷하게 service 확장시킬 있습니다.

kevin@docker-swarm-master:~$ docker service scale apache=3
apache scaled to 3
overall progress: 3 out of 3 tasks
1/3: running   [==================================================>]
2/3: running   [==================================================>]
3/3: running   [==================================================>]
verify: Service converged
kevin@docker-swarm-master:~$ docker service ps apache
ID             NAME       IMAGE          NODE                  DESIRED STATE   CURRENT STATE            ERROR     PORTS
tno1vb8gxyuq   apache.1   httpd:latest   docker-swarm-master   Running         Running 3 minutes ago
dt16yp4diu0r   apache.2   httpd:latest   docker-swarm-node2    Running         Running 46 seconds ago
izer1edy1pkp   apache.3   httpd:latest   docker-swarm-node1    Running         Running 46 seconds ago

모든 도커 노드에서 정상 작동을 확인할 있습니다.

댓글