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 화면