1. 개요

<Docker 가상 환경 구축 입문>의 <Chapter 9-3. 서비스와 태스크>을 읽고 정리한 내용으로,

Docker Swarm 내에서 서비스와 태스크란 무엇인지에 대한 설명입니다.


2. Swarm의 서비스와 태스크

  • Swarm Cluster에서 서비스란, 기본적인 배포 단위로, 기동할 이미지, 컨테이너 수, 설정 등을 정의한 것.
  • docker service create 명령어를 사용하여 생성하며, --replicas 옵션을 사용하여 동일 이미지를 기동할 컨테이너 수를 지정할 수 있음.
  • 여러 대의 노드에서 같은 역할을 하는 컨테이너를 실행하여 로드밸런싱하거나, 장애 상황에 대비한 이중화 구성을 할 수 있음.
  • Swarm Cluster에서 태스크란, 컨테이너 배포 단위로, 하나의 서비스는 여러개의 테스크를 실행할 수 있음.
  • --replicas 옵션에 지정한 수만큼 태스크가 생성되며, 각 워커노드에 태스크가 할당됨.
  • 서비스와 태스크의 구성도는 다음과 같이 표현할 수 있음.
    • docker service create --replicas 3 nginx 명령을 실행한 경우의 구조도.
    • 위와 같이 매니저 노드에서 각 워커 노드로 태스크를 할당하는 기능을 스케줄링 서비스라고 함.

 

3. Swarm Cluster 서비스 생성 예시

  • Swarm 구성을 GUI로 확인하기 위한 Visualizer 실행
    $ eval $(docker-machine env manager1)
    
    $ docker run -d --name=viz --publish=8080:8080/tcp 
    \ --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock 
    \ dockersamples/visualizer
    
    Unable to find image 'dockersamples/visualizer:latest' locally
    ...
    Status: Downloaded newer image for dockersamples/visualizer:latest
    b1e3fb8efbc229a32fff2b8bda7abd22ac2e469c8fd86c3806d5aed99ea2587f
    
    $ docker-machine ip manager1
    
    • Visualizer 이미지를 매니저 노드에서 기동. 매니저 노드의 ip:8080으로 접속하여 Visualizer 확인 가능.
    • Swarm 모드의 클러스터 정보나 컨테이너 가동 정보 등을 취득하기 위해 docker.sock 마운트.

 

  • nginx 서비스 생성
    $ docker service create -d --name nginx --replicas 3 --publish 8000:80 nginx
    p4cdy0ujtk7np8umaghhiemxt
    
    $ docker service ls
    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    p4cdy0ujtk7n        nginx               replicated          0/3                 nginx:latest        *:8000->80/tcp
    
    $ docker service ps nginx
    ID                  NAME           IMAGE               NODE           DESIRED STATE       CURRENT STATE           ERROR          PORTS
    5shsjcbda4xh        nginx.1        nginx:latest        worker1        Running             Preparing 16 seconds ago                       
    q87wonj0x5re        nginx.2        nginx:latest        worker2        Running             Preparing 16 seconds ago                       
    au4dclkl3m9d        nginx.3        nginx:latest        manager1       Running             Preparing 16 seconds ago 
    
    $ docker-machine ls
    NAME       ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
    manager1   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.9   
    worker1    -        virtualbox   Running   tcp://192.168.99.101:2376           v18.09.9   
    worker2    -        virtualbox   Running   tcp://192.168.99.102:2376           v18.09.9
    • docker service ls 결과 중 REPLICAS는 기동중인 레플리카 수/전체 레플리카 수 를 의미함.

 

  • 서비스 생성 후 Visualizer 화면