도커를 간단하게 사용하는 방법은 주로 하나의 호스트를 기준으로 잡혀있습니다. 하지만 하나의 호스트 머신에서 도커엔진을 사용하다가 서버의 CPU나 메모리, 용량이 부족하다면 어떻게 해결해야 할까요?
간편한 방법은 "성능이 좋은 서버를 새로 구축한다"겠지만 확장성 측면에서는 좋은 방법이 아닐 수 있습니다. 왜냐하면 자원이 부족할 때마다 매번 좋은 서버를 구축할 수도 없을 뿐 아니라 비용적인 측면에서도 굉장히 비효율적이기 때문에 여러 서버를 클러스터로 만들어 자원을 병렬로 확장하는 방법을 많이 사용합니다.
Docker Swarm
Docker Swarm은 도커의 오케스트레이션 계층을 구현하고, 도커 엔진에 내장된 클러스터 관리 및 오케스트레이션 도구 입니다.
Swarm 모드는 도커엔진 자체에 내장되어 있으므로 별도의 설치 과정이 필요하지 않으며 docker info 명령어로 Swarm 모드 클러스터 정보를 확인할 수 있습니다.
Docker Swarm의 구조
Swarm 모드는 매니저 노드와 워커 노드로 구성되어 있으며, 워커 노드는 실제로 컨테이너가 생성되고 관리되는 도커 서버이고, 매니저 노드는 워커 노드를 관리하기 위한 도커 서버입니다. 특히 매니저 노드는 워커 노드만 관리하는 것이 아닌, 워커 노드처럼 컨테이너가 생성될 수 있습니다. 쉽게 말하면 매니저 노드는 워커 노드의 상위 개념입니다.
스웜 모드는 절반 이상의 매니저 노드에 장애가 생겨 작동이 되지 않을 경우 매니저 노드가 복구 될 때까지 클러스터의 운영을 중단하기 때문에 짝수 개가 아닌 홀수 개로 구성하는 것이 권장됩니다.
Swarm Service
Swarm 모드를 사용하지 않는 도커환경에서는 도커 명령어의 제어 단위가 '컨테이너'이지만 Swarm 모드에서는 서비스(Service) 단위입니다. 서비스는 같은 이미지에서 생성된 컨테이너의 '집합'이며 서비스 제어를 통해 해당 서비스에 있는 컨테이너에 같은 명령이 수행됩니다. 서비스 내에 컨테이너는 1개 이상 존재할 수 있으며, 컨테이너들은 각 워커 노드와 매니저 노드에 할당됩니다.
Swarm 모드 사용해보기
Swarm 모드를 제대로 활용하기 위해서는 여러 서버가 필요하지만 지금은 간단하게 PC한대에 매니저 노드만 구축하겠습니다.
1. 매니저 노드 설정
docker swarm init --advertise-addr {매니저 노드가 될 서버의 IP주소}
해당 명령어 입력 시 매니저 노드로 설정되었다는 문구와 함께 워커 노드에서 매니저 노드에 연결하기 위한 명령어가 주어집니다.
docker swarm join --token SWMTKN-1-4zgvh3v41vczpxislbbs91j6ltkwvykphnc20fmxra0itktk7r-5h8q6kzqe2uhvcsqaa5y4qjky IP:2377
2. 서비스 생성하기
docker service create 명령어로 ubuntu:14.04를 이미지로 한 컨테이너를 생성했습니다.
컨테이너도 'hello world'라는 문구를 계속 출력하고 있으므로 정상작동하고 있음을 알 수 있습니다.
3. 서비스 삭제하기
서비스 삭제는 컨테이너 삭제와 비슷합니다.
docker service rm <서비스 이름>
4. 서비스 내의 샘플 컨테이너 개수 늘리기
docker service scale <서비스 명>=<개수>
컨테이너의 개수가 3개로 늘어난 것을 확인할 수 있습니다.
마치며
Docker를 공부하며 Docker Swarm 모드라는 것을 알게 되어 샘플 테스트를 진행해 봤다. Docker를 클러스터 형태로 사용하는 것은 쿠버네티스가 유일할 줄 알았는데 Docker Swarm이라는 자체 기능을 제공해 준다는 점이 매우 흥미로웠는데 Docker Swarm은 실제 운영환경에서는 많이 쓰이지는 않는다고 한다. 아마도 쿠버네티스가 더 효율적? 이기 때문인 것 같은데 아직 쿠버네티스를 사용해 본 적이 없어서 어떤 차이점이 있는지는 정확히 알지는 못하겠다... 이번에 테스트를 하는 환경은 매니저 노드를 하나만 만들어서 진행했는데 다음에 좀 더 어려운 부분은 AWS를 이용해서 다중 서버 환경을 만들어 테스트해 봐야겠다.
참조 문헌
- https://docs.docker.com/engine/swarm/key-concepts/
Swarm mode key concepts
Introducing key concepts for Docker Engine swarm mode
docs.docker.com
- 시작하세요! 도커/쿠버네티스
'Docker' 카테고리의 다른 글
Docker 환경에서 크롤링하기(동적 웹) (0) | 2023.06.30 |
---|---|
Docker 환경에서 크롤링하기 (0) | 2023.04.16 |
Docker - Airflow (0) | 2023.04.12 |
Docker 환경 구성 (2) (0) | 2023.04.11 |
Docker 환경 구성 (1) (0) | 2023.04.03 |