금일은 도커 컨테이너 오케스트레이션 도구와 Docker Swarm 에 대해 알아보겠습니다.
컨테이너의 배포, 관리, 확장, 네트워킹을 자동화 해주는 도구 입니다.
수천, 수백 개의 컨테이너와 호스트를 배포하고 스케줄링하기 위해 사용되는 도구 입니다.
컨테이너 오케스트레이션의 특징은 아래와 같습니다.
여러 docker host 를 클러스터로 묶어주는 컨테이너 오케스트레이션 으로 아래 와 같은 역할이 존재합니다.
이름 | 역할 | 대응하는 명령어 |
---|---|---|
Compose | 여러 컨테이너로 구성된 Docker 애플리케이션을 관리 (주로 단일 호스트) | docker-compose |
Swarm | 클러스터 구축 및 관리 (주로 멀티 호스트) | docker swarm |
Service | Swarm에서 클러스터 안의 서비스 (컨테이너 하나 이상의 집합)을 관리, 두개이상의 host pc 또는 vm 환경 | docker service |
Stack | Swarm에서 여러 개의 서비스를 합한 전체 애플리케이션을 관리 | docker stack |
Manager 노드에 Swarm 초기화 설정
해당 실습은 Docker swarm을 local 환경에서 실행하기 위해 두가지 방법이 있습니다.
우리는 두번째 방식으로 실습을 진행하겠습니다.
Cluster 를 구축하기 위해서는 dind 이미지로 최소 2개정도의 컨테이너를 구동후에 1 : N 의 관계로 구축해 보겠습니다.
Worker Container 를 Manager Container 에 등록하기 위해 docker swarm join
명령어를 사용하겠습니다.
docker exec -it manager docker swarm init
docker exec -it worker01 docker swarm join --token [JOIN TOKEN] manager:2377
Swarm 에서 사용할 포트로는 다음과 같습니다.
windows 10 환경에서의 Gitbash 를 활용해서 구성해보았습니다.
docker-server
docker run --privileged --name manager -itd -p 10022:22 -p 8082:8080 -e container=docker -v //sys/fs/cgroup:/sys/fs/cg
roup:rw --cgroupns=host edowon0623/docker:latest /usr/sbin/init
docker-server ssh 접속
ssh root@127.0.0.1 -p 10022
docker server 활성화
systemctl start docker
systemctl status docker
worker node 활성화
workernode 도 마찬가지로 docker 를 활성화 해주자
docker run --privileged --name worker1 -itd -p 20022:22 -p 8083:8080 -e contai
ner=docker -v //sys/fs/cgroup:/sys/fs/cgroup:rw --cgroupns=host edowon0623/docke
r:latest /usr/sbin/init
aaad57b6985e7421c1a86d978c5f6cf2defb7c2234c5691ac038f23bb82eb19e
docker run --privileged --name worker2 -itd -p 30022:22 -p 8084:8080 -e contai
ner=docker -v //sys/fs/cgroup:/sys/fs/cgroup:rw --cgroupns=host edowon0623/docke
r:latest /usr/sbin/init
aaad57b6985e7421c1a86d978c5f6cf2defb7c2234c5691ac038f23bb82eb19e
docker swarm init & join
init 명령어는 manager 노드에 입력해주면 아래의 join 명령어와 token 값이 주어진다
join 명령어는 worker 노드에 입력해준다.
docker swarm init
docker swarm join --token SWMTKN-1-0puuplo50ardu0uyl50lkr1usjas5jhlm474ccij4ehg9uydyw-ayc7tn9br100gy6z1dt080y4l 172.17.0.2:2377
노드 확인 명령어
docker node ls
아래와 같이 hostname 으로 구별 가능하다.
manager 노드는 leader 로 표시되는 것을 볼 수 있다.
애플리케이션을 구성하는 일부 컨테이너(단일 또는 복수)를 제어하기 위한 단위
docker service create --replicas 1 --publish 80:80 --name my-nginx nginx:latest
docker service ls
docker service scale my-nginx=3
docker service ps my-nginx
docker service rm my-nginx
해당명령어는 manager 실행의 역할이며 복제본을 생성하는 replicas
, 컨테이너의 개수를 늘려주는 스케일 아웃의 scale
명령어가 있다.
ps
명령어를 통해 증가한 3개의 컨테이너가 어떤 노드(manager, worker) 에 할당되었는지 볼 수 있다.
해당 이미지 처럼 컨테이너가 실행되고 woker 노드의 컨테이너를 stop
rm
명령어를 통해 삭제해도 새로운 컨테이너가 실행되는 것을 확인 할 수 있다.
docker service rm my-nginx
해당 명령어로 삭제하면 컨테이너가 실행되지 않는 것을 확인 가능하다.
다음 시간에는 Docker Swarm 의 Stack 에 대해 알아보겠습니다.