Docker - Container Orchestration, Docker Swarm

INHEES·2025년 1월 3일
0

금일은 도커 컨테이너 오케스트레이션 도구와 Docker Swarm 에 대해 알아보겠습니다.

목차

  • 컨테이너 오케스트레이션 도구
  • Docker Swarm 을 이용한 컨테이너 관리
  • Docker Swarm Service

Orchestration Tools

컨테이너의 배포, 관리, 확장, 네트워킹을 자동화 해주는 도구 입니다.

  • https://landscape.cncf.io/
  • 해당 사이트는 cncf 로 cloud 에서 사용되는 다양한 기술 서비스 모든 것들을 정의내리고 소개하는 사이트 입니다.
  • kubernetes 에 비해 간소한 Docker Desktop 설치시 자동 설치되는 Docker swarm 에 대해 알아보겠습니다.
  • 컨테이너 런타임이 설치되어 있는 상태여야 orchestration tools 을 사용 가능합니다.

수천, 수백 개의 컨테이너와 호스트를 배포하고 스케줄링하기 위해 사용되는 도구 입니다.

컨테이너 오케스트레이션의 특징은 아래와 같습니다.

  • 프로비저닝 및 배포
  • 구성 및 일정 조정
  • 리소스 할당
  • 컨테이너 가용성
  • 컨테이너 스케일링
  • 로드밸런싱 및 트래픽 라우팅
  • 컨테이너 상태 모니터링

Docker Swarm

여러 docker host 를 클러스터로 묶어주는 컨테이너 오케스트레이션 으로 아래 와 같은 역할이 존재합니다.

이름역할대응하는 명령어
Compose여러 컨테이너로 구성된 Docker 애플리케이션을 관리 (주로 단일 호스트)docker-compose
Swarm클러스터 구축 및 관리 (주로 멀티 호스트)docker swarm
ServiceSwarm에서 클러스터 안의 서비스 (컨테이너 하나 이상의 집합)을 관리, 두개이상의 host pc 또는 vm 환경docker service
StackSwarm에서 여러 개의 서비스를 합한 전체 애플리케이션을 관리docker stack

멀티 노드의 Swarm Cluster 구성하기

Manager 노드에 Swarm 초기화 설정

  • Manager 노드에 docker swarm init 설정 -> swarm 모드 활성화
  • Worker 노드를 Manager 노드에 등록 -> Token 필요

해당 실습은 Docker swarm을 local 환경에서 실행하기 위해 두가지 방법이 있습니다.

  • host pc 위에 vm 을 설치하여 guest pc 로 적용하기
  • Docker in Docker (dind) 방식으로 도커 컨테이너 안에 도커 호스트를 실행

우리는 두번째 방식으로 실습을 진행하겠습니다.

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 에서 사용할 포트로는 다음과 같습니다.

  • tcp port 2377 : cluster management 통신에 사용
  • tcp/udp port 7946 : node 간의 통신에 사용
  • tcp/udp port 4789 : overlay network 트래픽에 사용

dind 이미지 구성

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 로 표시되는 것을 볼 수 있다.


Swarm Service 활용

애플리케이션을 구성하는 일부 컨테이너(단일 또는 복수)를 제어하기 위한 단위

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 에 대해 알아보겠습니다.

profile
이유를 찾아보자

0개의 댓글