OS/Linux

Docker Swarm 설정하기

아르비스 2019. 7. 9. 14:42

Docker Swarm


 

 

Docker Swarm 이란?

수많은 컨테이너 오케스트레이션 도구 중의 하나로, 여러 대의 Docker 호스트들을 마치 하나인 것처럼 만들어주는 Orchestration 도구입니다.

Docker v1.12 이후부터 Docker Swarm Mode 로 별개의 Docker Swarm 엔진에서 Docker 엔진으로 통합되면서 좀 더 간편한 설치가 가능해졌습니다.

 

쉬워진 Docker Swarm 직접 설치 해보도록 하겠습니다.

 

Docker Swarm 설치

 

(Docker Document, How nodes work - https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/)

불러오는 중입니다...

 

Docker Swarm init


Docker Swarm 를 구성하기 위해 아래와 같이 명령 수행을 합니다.

# docker swarm init --advertise-addr [Manager Node IP]

 

[root@manager1 ~]# docker swarm init --advertise-addr 192.168.13.176

Swarm initialized: current node (y8ul9r3jq0rgt9k3vbvrayeyg) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-2m3tqsm8ly45vpd5i80p4bkor5zaohfmultu4cdnvfpg8yxmuk-bv8adgschaygmg9icehekb9wg \ 192.168.13.176:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

 

위와 같이 초기화를 진행하면 Worker 노드를 추가하는 token 값으로 명령어가 자동 생성됩니다.

해당 명령을 Worker 노드에 입력하면 해당 노드는 Worker 노드가 됩니다.

Master 노드(Manager 노드)를 추가하기 위해서는

# docker swarm join-token manager

명령을 통해 명령어를 생성해야됩니다.

 

# docker swarm join-token manager

To add a manager to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-2m3tqsm8ly45vpd5i80p4bkor5zaohfmultu4cdnvfpg8yxmuk-9ghru6puwdvqms3bn7zqtiyvt \ 192.168.13.176:2377

 

Manager 연결을 위해 생성된 명령을 나머지 Manager 노드에 아래와 같이 입력합니다.

[root@manager2 ~]# docker swarm join \

> --token SWMTKN-1-2m3tqsm8ly45vpd5i80p4bkor5zaohfmultu4cdnvfpg8yxmuk-9ghru6puwdvqms3bn7zqtiyvt \

> 192.168.13.176:2377 This node joined a swarm as a manager.

[root@manager3 ~]# docker swarm join \

> --token SWMTKN-1-2m3tqsm8ly45vpd5i80p4bkor5zaohfmultu4cdnvfpg8yxmuk-9ghru6puwdvqms3bn7zqtiyvt \

> 192.168.13.176:2377 This node joined a swarm as a manager.

 

Docker Swarm 구성 확인


[root@manager1 ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS lrt89xwkugty162qk8c2av5ek manager2.example.com Ready Active Reachable y8ul9r3jq0rgt9k3vbvrayeyg * manager1.example.com Ready Active Leader yqerq5ujds38t0izzlp03dbhd manager3.example.com Ready Active Reachable

# docker node ls

위와 같이 manager 로 노드들이 연결된 것을 확인 할 수 있습니다.

 

Docker Swarm 기본 사용법


Docker Swarm 에서 사용되는 기본적인 명령을 간단한 Apache 서비스를 기동하면서 확인 해보겠습니다.

 

Docker Swarm Service 생성


Docker Swarm 명령어는 기존의 docker 명령어와 크게 다른 점은 없습니다.

기본적으로 docker run 에서 사용되는 옵션을 그대로 사용 할 수 있습니다.

 

아래 명령을 통해 Docker Swarm Mode 로 컨테이너를 실행 할 수 있습니다. 

Usage:  docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]

[root@manager1 ~]# docker service create --name web httpd xocc6zwdulliijqpypwby764d

 

Docker Swarm Service 확인


생성된 서비스가 정상적으로 실행이 되었는지는 아래 명령으로 확인이 가능합니다.

Usage:    docker service ls

[root@manager1 ~]# docker service ls

ID NAME MODE REPLICAS IMAGE

xocc6zwdulli web replicated 0/1 httpd:latest

[root@manager1 ~]# docker service ls

ID NAME MODE REPLICAS IMAGE

xocc6zwdulli web replicated 1/1 httpd:latest

처음 REPLICAS 필드가 0/1 로 시작해서 1/1 로 변경이 되면 컨테이너가 정상적으로 실행이 된 것으로 확인 할 수 있습니다.

해당 필드를 통해 컨테이너가 문제가 생겼는지 정상 작동 중인지 확인이 가능합니다.

 

또한 각 서비스 별로 자세한 정보를 확인하는 명령은 아래와 같습니다.

Usage:    docker service ps [SERVICE]

[root@manager1 ~]# docker service ps web

ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS

9x3qvcl5seif web.1 httpd:latest manager2.example.com Running Running 2 minutes ago

Docker Swarm Service Scale-out


생성된 서비스를 복제하여 분산 서비스를 할 수 있도록 합니다.(Scale-out)

Usage:  docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]

[root@manager1 ~]# docker service scale web=3

web scaled to 3

[root@manager1 ~]# docker service ls

ID NAME MODE REPLICAS IMAGE

xocc6zwdulli web replicated 1/3 httpd:latest

[root@manager1 ~]# docker service ls

ID NAME MODE REPLICAS IMAGE

xocc6zwdulli web replicated 3/3 httpd:latest

[root@manager1 ~]# for i in $(cat /etc/hosts | grep manager| awk '{print $1}') > do > ssh root@$i "docker ps -a" > done

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

e517f6af9ebd httpd@sha256:d12c036427f436978f2d4397ad2bd6b5b8f7b03003b7a1da084eb228ef25b7d2 "httpd-foreground" 5 minutes ago Up 5 minutes 80/tcp web.2.57p0vzbkqymvak5t5rw6g42k9

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

91dddedf7374 httpd@sha256:d12c036427f436978f2d4397ad2bd6b5b8f7b03003b7a1da084eb228ef25b7d2 "httpd-foreground" 9 minutes ago Up 9 minutes 80/tcp web.1.9x3qvcl5seifoidt5jy4fm3oa

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

2a3ade0887f9 httpd@sha256:d12c036427f436978f2d4397ad2bd6b5b8f7b03003b7a1da084eb228ef25b7d2 "httpd-foreground" 5 minutes ago Up 5 minutes 80/tcp web.3.aqlqfena08g9c50tdl5vgb4ju

[root@manager1 ~]# docker service ps web ID

NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS

9x3qvcl5seif web.1 httpd:latest manager2.example.com Running Running 9 minutes ago 57p0vzbkqymv web.2 httpd:latest manager1.example.com Running Running 6 minutes ago aqlqfena08g9 web.3 httpd:latest manager3.example.com Running Running 6 minutes ago

Docker Swarm Service 제거


생성한 서비스의 제거 및 종료는 아래 명령을 통해 가능합니다.

Usage:  docker service rm SERVICE [SERVICE...]

[root@manager1 ~]# docker service rm web web

[root@manager1 ~]# docker service ls

ID NAME MODE REPLICAS IMAGE

[root@manager1 ~]# docker service ps web Error: No such service: web