도커 스웜은 여러 도커 호스트를 클러스터로 묶어주는 컨테이너 오케스트레이션 도구의 한 종류입니다.
앞서 배웠던 도커 컴포즈와 비슷한 역할을 하지만 주로 멀티 호스트 상황에서 쓰입니다.
이번에는 dind를 이용해서 테스트를 진행 해 보도록 하겠습니다.
dind
dind(docker in docker)는 도커 호스트 역할을 할 도커 컨테이너를 여러개 실행하는 방법입니다. 가상머신 등의 리소스가 많이드는 작업이 아니기 때문에 굉장히 유용합니다. 이번 장에서는 크게 3가지 컨테이너를 사용하려고 합니다.
registry x1 : 도커 레지스트리 역할을 할 컨테이너로 manager 및 worker 컨테이너가 사용하는 컨테이너입 니다. dind 환경에서는 외부 도커의 이미지를 가져올 수 없으므로 registry 컨테이너에 등록 했다가 manager 및 worker 컨테이너에서 이미지를 받아가는 역할을 합니다.
manager x1 : 스웜 클러스터 전체를 제어하는 역할을 합니다. 여러 대 실해오디는 도커 호스트(worker)에 서비스가 담긴 컨테이너를 적절히 배치합니다.
스택은 위에서 공부한 서비스를 묶는내용으로 하나 이상의 서비스를 그룹으로 묶은 단위를 뜻합니다. 유명한 스택으로는 ELK스택이 있습니다. ELK는 ElasticSearch + LogStash + Kibana를 뜻하며 각각의 서비스를 묶었습니다. 서비스는 어플리케이션 이미지를 하나밖에 다루지 못하지만 여러 서비스가 협조해 동작하는 형태로는 다양한 어플리케이션을 구성 할수 있습니다. 이를 스택이라고 부릅니다.
스택은 앞서배운 컴포즈와 굉장히 비슷하면서 다릅니다. 스택은 스웜에서 동작하느 스케일 인, 스케일 아웃, 제약조건 부여가 가능한 컴포즈라고 생각 할 수 있습니다. 스택을 이용해 배포된 서비스 그룹은 overlay 네트워크에 속하게 되는데, overlay 네트워크는 여러 도커 호스트에 걸쳐 배포된 컨테이너 그룹을 같은 네트워크에 배치하기 위한 기술을 말합니다.
스웜 클러스터에 존재하는 컨테이너 그룹들이 어떤 노드에 배치되어있는지를 시각화 해 보여주는 visualizer를 예로 들어 스택으로 실행 해보겠습니다.
version:"3"services:# 클러스터 환경을 확인할 수 있는 gui 툴visualizer:image:dockersamples/visualizerports:-"9000:8080"volumes:-"/var/run/docker.sock:/var/run/docker.sock"deploy:mode:globalplacement:constraints: [node.role ==manager]
위와 같은 파일을 manager 컨테이너 내부 stack 폴더에 만들어 준뒤 다음의 명령어를 실행해 줍니다.
정상적으로 실행 된다면 다음과 같이 도커 내부의 컨테이너들의 실행 목록을 확인 할 수있습니다.
요약
물리적인 1대의 호스트(컴퓨터) 에서 여러대의 호스트를 실행하기 위해 docker-compose로 1개의 registry, 1개의 manager, 3개의 worker를 생성하였습니다. 각각의 worker를 manager와 연결 해 주었고, 워커에 이미지를 받아오도록 하였으며, 서비스 및 스택에 대한 테스트를 해 보았습니다.