Docker Swarm 구축 시에 가상머신으로 노드를 띄우고자 한다면 ‘Docker-Machine’을 활용해보는 것도 좋은 옵션입니다. Docker-Machine은 가볍고 최적화된 OS 이미지로 Swarm 노드들을 생성하고 클러스터 운영/관리를 돕는 커맨드-라인 기반의 플러그인입니다.
사전 준비요소
Docker 서비스를 구동시키는 Docker Engine과 가상머신 생성을 위한 드라이버를 제공하는 VirtualBox나 VMware와 같은 도구가 미리 설치되어 있어야 합니다.
- Docker Engine: https://docs.docker.com/engine/install/
- Virtualbox: https://www.virtualbox.org/wiki/Downloads
Downloads – Oracle VM VirtualBox
Docker-machine 설치
# Windows
$ if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && \
curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && \
chmod +x "$HOME/bin/docker-machine.exe"
# Mac OS 또는 여타 다른 Linux
$ curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine && \
chmod +x /usr/local/bin/docker-machine
Docker-machine으로 Node 만들기
docker-machine
명령어로 Docker가 탑재된 가상의 클라이언트 호스트를 만들 수 있고, 각 Docker 클라이언트에 Docker 명령을 실행할 수 있습니다.
실습을 위해 가장 먼저 Node를 3개 생성하였으며, 본 포스트에서는 VirtualBox 플랫폼을 선택하였습니다. 관리자 또는 root 모드로 진행해주세요.
# Node 생성
$ docker-machine create --driver virtualbox node1
$ docker-machine create --driver virtualbox node2
$ docker-machine create --driver virtualbox node3
# Node 목록 조회
$ docker-machine ls
Swarm 클러스터 생성
만들어진 노드에 Mangager와 Worker 중 하나의 역할을 부여합니다.
- Manager Node:
node1
- Worker Node:
node2
,node3
Manager에 해당하는 노드는 우선 docker swarm init
이라는 명령어로 클러스터를 생성해야합니다. 이 때 노드는 가상의 클라이언트이기 때문에, swarm 명령어를 호스트 PC에서 SSH로 던져줘야합니다. 다행히도, docker-machine ssh
명령어를 이용하면 간단하게 각 Node에게 SSH 채널로 명령을 수행하게 할 수 있습니다.
# 각 노드의 IP 확인 후,
$ docker-machine ls
# Manager Node가 될 노드의 IP를 명시하여 swarm init 수행
$ docker-machine ssh node1 "docker swarm init --advertise-addr [Manager Node의 IP]"
이제 Worker에 해당하는 나머지 node2
, node3
를 node1
에 연결해주어야 합니다. 이는 swarm join
명령어로 할 수 있으며, 클러스터에 붙을 수 있는 노드임을 인증하기 위해 ‘token’이라는 정보를 제공해야합니다.
앞서 swarm init
명령을 수행하면 화면에 친절하게도 token 정보와 아래와 같은 swarm join
명령어를 수행하라고 안내해 줍니다.
docker node ls
명령을 수행해보면 각 노드의 상태와 역할(Manager Status)을 확인할 수 있습니다. Manager Status의 구분은 다음과 같습니다.
- Leader: 클러스터를 최초로 생성한 노드 (=
swarm init
을 수행한 노드) - Reachable: 클러스터 생성 이후에 Manager 자격을 부여 받은 노드
- 공란: Worker 노드
한 번 확인해볼 겸, node2
를 Manager로 변경해보겠습니다.
$ docker-machine ssh node1 "docker node update --role manager node2"
Service 생성부터 그 이후까지
가상 클라이언트로 노드를 구성한 뒤에 Service를 생성하는 내용은 이전 포스트(~~)와 그대로 동일합니다. 다만 작업을 할거면 가상머신의 터미널로 들어가야겠죠. 이때는 아래와 같이 SSH로 원격 접속을 하면 됩니다.
# SSH 접속 (username: docker, password: tcuser)
$ ssh docker@[노드 IP]
SSH 접속 이후에 간단히 Service를 생성하는 것으로 본 포스트의 내용을 마칩니다.
$ docker service create --detach --replicas 1 --name my_app alpine