개인서버에 컨테이너 오케스트레이션 툴 사용하기
2025. 12. 23.
컨테이너 오케스트레이션 툴이 뭘까?
서버 한대를 기준으로 서비스를 올릴 땐 도커 컴포즈를 통해서 올리거나 단일 컨테이너를 올리면 쉽게 서비스를 올릴 수 있다. 하지만 만약 서버에 문제가 생긴다면 서비스는 바로 다운되고 말 것이다. 그럴때 필요한 것이 컨테이너 오케스트레이션 툴을 통해서 서비스의 가용성을 높이는 것이다.
컨테이너 오케스트레이션 툴은 여러개의 서버를 하나의 서버처럼 다룰 수 있게 해준다.
가령 A, B, C 세개의 서버가 있을 때 내가 올리는 서비스를 적절한 서버에 배치해주기도 하고, C 서버에 장애가 생겼을 때는 C 서버에 있던 서비스들을 A나 B에 자동으로 배치도 해주고, 서비스 컨테이너가 다운되었을 때 자동 복구 및 무중단 배포도 할 수 있도록 해준다.
즉 고가용성을 구현해준다는 말이다.
고가용성이란 무엇일까?
가용성이 높다는 말은 서비스가 가능한 한 살아있도록 만드는 설계를 말한다. 서버가 고장, 서비스 컨테이너 다운, 배포 중이어도 사용자는 서비스 중단을 느끼지 않고 사용할 수 있으면 가용성이 높다고 할 수 있는 것이다.
도커 스웜 사용하기
도커 엔진에 내장된 컨테이너 오케스트레이션 툴인 도커 스웜을 사용하면 쉽게 서비스의 가용성을 높일 수 있다. 서버에 도커가 설치되어 있다면 아주 쉽게 도커 스웜을 사용할 수 있다.
sudo ufw allow 2377/tcp
sudo ufw allow 7946
sudo ufw allow 4789/udp
위와 같이 포트를 열어준다. 2377/tcp, 7946/tcp, 7946/udp, 4789/udp 포트를 열어주면 스웜모드를 사용할 준비는 모두 끝난 것이다. 우분투를 사용하고 있기 때문에 ufw를 사용해서 포트를 열어주었고, 각자의 환경에 맞게 포트를 열어주기만 하면 된다.
docker swarm init
위와 같이 명령어를 입력하면 스웜모드가 시작된다.
Swarm initialized: current node (~~~) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token 토큰 매니저ip
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
스웜모드를 시작하면 위와 같이 컨테이너 오케스트레이션에 포함시킬 수 있는 방법을 알려준다. 연결할 서버가 여러대 있다면 토큰과 매니저 노드 ip를 통해서 스웜에 참여시킬 수 있다.
단일 서버에서 사용할때와 달라지는 개념
스웜모드를 시작하면 일단 매니저 노드와 워커 노드로 나뉘어진다. 워커 노드는 컨테이너가 실행되는 서버이다. 매니저 노드는 컨테이너가 실행될 수 있을 뿐만 아니라 서비스를 올릴 수 있고 관리도 할 수 있는(docker service ~, docker stack ~ 명령어 입력이 가능) 서버를 말한다.
그러면 서비스는 무엇을 뜻할까? 도커로 컨테이너를 올리듯이 스웜모드에서는 서비스를 올린다. 서비스는 컨테이너가 어떤 모양이 되어야 하는 지를 담고 있는 이미지라고 생각하면 된다. 실제로 컨테이너는 replica라고 표현한다.
docker service create --name redis --replicas=5 redis:7.4.1
공식문서의 예시를 보면, 위와 같이 입력하면 redis:7.4.1 버전을 가지고 와서 redis 라는 서비스 이름으로 5개의 컨테이너를 만들겠다는 의미이다.