Docker Swarm 이란

Container Orchestration 중 하나로 Docker v1.12 이후부터 Swarm Mode가 통합되면서 쉽게 구성이 가능해짐 클러스터를 관리하는 Manager Node와 실제 컨테이너를 실행하는 Worker Node가 있음 docker_Swarm

Manager Node 역할

  • 클러스터 상태 유지
  • 스케줄링 서비스
  • HTTP API Endpoints 제공

Manager Node 구성 중 확인사항

  • 기본적으로 3EA의 Manager Node는 1EA Stop 허용
  • 5EA의 Manager Node는 최대 2EA Stop 허용
  • N EA의 Manager Node 최대 Stop 허용 갯수 : (N-1)/2
  • Docker는 최대 7EA의 Manager Node를 권장

※ Manager Node를 추가한다고해서 확장성또는 성능이 향상되진 않음. 일반적으로 그 반대가 사실.

Docker Swarm 구성 (Manager Node 1EA Worker Node 2EA)

Master > Manager Node(192.168.56.101)
node1 > Worker Node(192.168.56.102)
node2 > Worker Node(192.168.56.103)

Docker 설치

(https://17billion.github.io/docker/2017/03/10/docker_install_exec.html 참고)

18.06.1-ce 설치
1. $ sudo apt-get update
2. $ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
3. $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg \| sudo apt-key add - 
4. $ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
5. $ sudo apt-get update
6. $ sudo apt-get install docker-ce=18.06.1~ce~3-0~ubuntu
7. $ sudo usermod -aG docker $USER 
   (현재 사용자에게 권한부여)
8. (재 로그인 후) $ docker ps

Swarm init (Manager Node)

$ docker swarm init --advertise-addr 
예시) user@master:~$ docker swarm init --advertise-addr 192.168.56.101
결과
Swarm initialized: current node (oczmgznj47bd58abjmrql4gc5) is now a manager.

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

    docker swarm join --token SWMTKN-1-1pud4gaae2bvwkqhbk1fngfsrw55v074lzoqd8fn31wxgmf0vj-egtud2vn5iam21giwki5kqxev 192.168.56.101:2377

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

Swarm join (Worker Node)

위 결과에서 나온 명령어 실행
예시) user@node2:~$ docker swarm join --token SWMTKN-1-1pud4gaae2bvwkqhbk1fngfsrw55v04lzoqd8fn31wxgmf0vj-egtud2vn5iam21giwki5kqxev 192.168.56.101:2377
This node joined a swarm as a worker.

확인 (nginx 3EA 생성)

1. (Manager Node) user@master:~$ docker service create --name nginx_service --replicas 3 nginx
2. $ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
f1ii0n7slud7        nginx_service       replicated          3/3                 nginx:latest
3. $ docker service ps nginx_service 
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
v4sctczj607a        nginx_service.1     nginx:latest        master              Running             Running 56 seconds ago
neeyipblvb3i        nginx_service.2     nginx:latest        node1               Running             Running about a minute ago
qzorauvtvja3        nginx_service.3     nginx:latest        node2               Running             Running 59 seconds ago

※ Swarm 탈퇴하기 $ docker swarm leave

참고사이트
docker.com : https://docs.docker.com/engine/reference/commandline/swarm_init/
subicura님 블로그 : https://subicura.com/2017/02/25/container-orchestration-with-docker-swarm.html