1. 개요

<Docker 가상 환경 구축 입문>의 <Chapter 9-6. 글로벌 모드와 레플리카 모드>를 읽고 정리한 내용으로,

Docker Swarm 서비스 생성 시의 레플리카 모드와 글로벌 모드에 대한 설명입니다.


2. 글로벌 모드와 레플리카 모드

  • 레플리카 모드는 서비스 생성 시 디폴트로 지정되는 모드이며, --replicas에 지정한 수대로 태스크를 생성하는 모드.
  • 글로벌 모드는 한 노드에 하나의 태스크를 할당하는 모드.
  • 레플리카 모드에서는 노드 수보다 많거나 적은 수의 태스크를 자유롭게 생성할 수 있는 것과 달리, 
    글로벌 모드에서는 레플리카 수를 지정할 수 없고, 자동적으로 각 노드에 하나의 태스크가 할당되어 컨테이너를 기동하게 됨.
  • 대표적인 예시로, 모니터링 에이전트 컨테이너를 노드마다 하나씩 동작시키고 싶을 때는 글로벌 모드를 사용하는 것이 적절함.

3. 글로벌 모드로 서비스를 생성하는 예제

  • 레플리카 모드로 서비스를 생성하는 것은 이전 글에서도 소개했기 때문에, 글로벌 모드로 생성하는 예제만 소개함.
  • 글로벌 모드로 서비스 생성하는 예제 (--mode global 옵션 사용)
    $ docker service create --name globalweb --mode global nginx
    c30azeyviguue2jumldi2fvsb
    overall progress: 3 out of 3 tasks 
    x0bh1ydgpb0e: running   [==================================================>] 
    jh8kbkd0bdhc: running   [==================================================>] 
    qqv1l08a8rol: running   [==================================================>] 
    verify: Service converged 
    
    $ docker service ps globalweb
    ID                  NAME                                  IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
    bensqfqnj9du        globalweb.x0bh1ydgpb0ezgs9y214r73v7   nginx:latest        manager1            Running             Running 16 seconds ago                       
    kiq7v6l107sr        globalweb.jh8kbkd0bdhcm96qmkrek8xbt   nginx:latest        worker2             Running             Running 16 seconds ago                       
    lbtyo37eunlr        globalweb.qqv1l08a8rol9d0cp2y8bs6dt   nginx:latest        worker1             Running             Running 16 seconds ago  
    • 자동적으로 노드 개수와 동일하게 태스크가 생성됨. 
    • 서비스 생성 후에 태스크의 상태를 보면, 각 노드에 태스크가 Running 상태로 확인됨. 
    • 레플리카 수를 지정하지 않고 각 노드에 각 한개씩의 컨테이너를 실행하고자 할 때에는 글로벌 모드를 사용하는 것이 편리함.