
도커 스웜은 별도로 설치할 필요 없이, 도커 서버 자체만드로 도커 스웜 클러스터를 손쉽게 구성할 수 있습니다 ;)
도커 스웜모드를 제공하는지 확인하기 위해서는 Docker Version을 확인하여 1.12버전 이상인지 확인합니다.
이번 실습에서는 Docker Swarm 클러스터를 구성하고 사용하는 실습을 진행합니다. 😁
도커 스웜은, 도커 컨테이너의 오케스트레이션 툴이라고 볼 수 있습니다.

도커 스웜은 마스터 노드와 워커노드 이렇게 2개의 역할이 있으며, 매니저 역할의 노드는 반드시 1개 이상, 워커노드는 없을 수 있습니다.
매니저 역할을 하는 노드는 워커노드의 역할도 수행하기때문입니다.
위 그림은 3개의 Manager 노드와, 7대의 Worker 노드로 구성되어있지만, 이번 실습에서는 1개의 Manager 노드, 2개의 Worker 노드로 구성하여 실습을 진행하겠습니다.
실 사용환경에서는 반드시 3개이상의 Manager 노드를 설정해주세요 :)
실습은 아래의 순서로 진행됩니다.
- Docker Swarm - Mamager 노드 설정
- Docker Swarm - Worker #1, #2 노드 추가
- Docker Swarm - 서비스 시작해보기
Docker Swarm 실습 구성

이 그림과 같이 총 3개의 서버 자원을 사용하여, 1개는 Manager, 2개는 Worker로 구성해보도록 하겠습니다.
이 실습의 사전 조건은 반드시 1.12이상의 도커 데몬이 설치되어있는것입니다.
도커 설치가 되어있지 않다면 여기를 클릭하여 설치부터 합니다 :)
Docker Swarm - Mamager 노드 설정
먼저, Manager 노드에서 Swarm init을 실행합니다.
[root@swarm-manager /]# docker swarm init
Swarm initialized: current node (nimv87d2pupej2uxxzthkugvx) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-23oim81yk3k1pd0ykpz4ezdnh22warxvrjaddtzjvdoqohu5zo-0nd5a0gpav8zp2rkbn45q00oq 172.31.13.191:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
자! 이제 구성이 완료되었습니다!!! 이렇게 간단하게 구성이 끝났습니다!!! 🥳🥳
만약 Manager 노트에 네트워크 인터페이스가 여러개 존재한다면,
어떤 IP를 쓸것인지 정한 후에 "docker swarm init --advertise-addr <Manager Node IP>" 명령어를 사용하면 됩니다.
Docker Swarm - Worker #1, #2 노드 추가
Manager 노드를 추가할때 출력됐던 내용중에 "docker swarm join~~" 부분을 복사하여 Worker Node에 붙여넣기 합니다!
먼저, Worker #1 노드에서 진행합니다.
[root@swarm-worker1 /]# docker swarm join --token SWMTKN-1-23oim81yk3k1pd0ykpz4ezdnh22warxvrjaddtzjvdoqohu5zo-0nd5a0gpav8zp2rkbn45q00oq 172.31.13.191:2377
This node joined a swarm as a worker.
이제, 두번째로 Worker #2 노드에서 진행합니다.
[root@swarm-worker2 /]# docker swarm join --token SWMTKN-1-23oim81yk3k1pd0ykpz4ezdnh22warxvrjaddtzjvdoqohu5zo-0nd5a0gpav8zp2rkbn45q00oq 172.31.13.191:2377
This node joined a swarm as a worker.
이렇게 두개의 노드가 추가되었습니다. 3개의 노드 모두 잘 운영중인지 확인해보겠습니다.
[root@swarm-manager /]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
nimv87d2pupej2uxxzthkugvx * swarm-manager Ready Active Leader 19.03.13
c60u9g03hg4z1co9a6pitimmo swarm-worker1 Ready Active 19.03.13
r7vk73m3yi3nm0p3k11xfmf5e swarm-worker2 Ready Active 19.03.13
모두 Active 상태로 잘 운영중이네요.
여기에서 별표(*)가 붙은 노드가 현재 노드입니다.
추가적으로 :)
새로운 매니저 노드를 추가하거나, 새로운 워커 노드를 추가할때는 아래와 같은 명령어를 사용할 수 있습니다.
<!-- Manager Node 추가 -->
[root@swarm-manager /]# docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-23oim81yk3k1pd0ykpz4ezdnh22warxvrjaddtzjvdoqohu5zo-bw42g26eho9dohi1nl2og0ur5 172.31.13.191:2377
<!-- Worker Node 추가 -->
[root@swarm-manager /]# docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-23oim81yk3k1pd0ykpz4ezdnh22warxvrjaddtzjvdoqohu5zo-0nd5a0gpav8zp2rkbn45q00oq 172.31.13.191:2377
Docker Swarm - 서비스 시작해보기
이번 단계에서는 도커 스웜에서 맛보기로 서비스를 시작해보겠습니다 :)
Docker Service 명령어를 이용해서 서비스를 생성하겠습니다.
[root@swarm-manager /]# docker service create --replicas 5 --name helloworld alpine ping docker.com
q6vjfrr3q7mqbwwb6ea7evfxc
overall progress: 5 out of 5 tasks
1/5: running [==================================================>]
2/5: running [==================================================>]
3/5: running [==================================================>]
4/5: running [==================================================>]
5/5: running [==================================================>]
verify: Service converged
서비스 생성이 완료 되었는지 확인하겠습니다. 확인 명령어는 docker service ls (서비스 목록 확인), docker service ps <서미스명> (서비스 내 컨테이너 상태 확인) 입니다!
<!-- 도커 서비스 목록 확인 -->
[root@swarm-manager /]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
q6vjfrr3q7mq helloworld replicated 5/5 alpine:latest
<!-- 도커 서비스의 컨테이너 상태 확인 -->
[root@swarm-manager /]# docker service ps helloworld
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
rqxf9vw6mwcj helloworld.1 alpine:latest swarm-worker1 Running Running about a minute ago
ds9rj06j94f3 helloworld.2 alpine:latest swarm-worker2 Running Running about a minute ago
jrvq3yuq4wxk helloworld.3 alpine:latest swarm-manager Running Running about a minute ago
nqpnq5ewrdch helloworld.4 alpine:latest swarm-worker1 Running Running about a minute ago
z904et43297e helloworld.5 alpine:latest swarm-manager Running Running about a minute ago
자! 여기까지 맛보기였습니다!!
다음 스탭으로 갑시다 !!