안녕하세요 펭귄 교수입니다.
도커(Docker)는 컨테이너 기반의 애플리케이션 배포와 관리를 간편하게 해주는 도구로 널리 사용되고 있습니다.
하지만 하나의 호스트에서만 컨테이너를 실행하는 데에는 한계가 있을 수 있습니다. 이 한계를 극복하고 여러 대의 호스트에서 컨테이너를 배포하고 관리하기 위해 도커 스웜(Docker Swarm)이 등장했습니다.
이번 포스팅에서는 도커 스웜이 무엇인지, 어떻게 사용되는지, 그리고 주요 개념과 명령어들을 다루겠습니다.
1. 도커 스웜이란?
도커 스웜(Docker Swarm)은 도커에서 제공하는 오케스트레이션 도구로, 여러 대의 서버(호스트)에서 컨테이너들을 클러스터링하여 관리할 수 있도록 도와줍니다. 이를 통해 여러 서버가 하나의 가상 서버처럼 작동하며, 컨테이너의 확장성, 가용성, 안정성을 보장할 수 있습니다.
스웜 모드는 도커 엔진에 기본적으로 포함되어 있으며, 별도의 설치 과정 없이 활성화하여 사용할 수 있습니다.
2. 도커 스웜의 주요 개념
도커 스웜을 이해하려면 몇 가지 주요 개념을 알아야 합니다.
2-1. 매니저 노드(Manager Node)
매니저 노드는 스웜 클러스터에서 가장 중요한 역할을 합니다. 클러스터의 상태를 관리하고, 각 워커 노드에 작업을 분배하는 역할을 합니다. 매니저 노드는 스웜 클러스터의 컨트롤 플레인으로 작동하며, 여러 개의 매니저 노드를 설정할 수 있지만 보통 홀수 개로 구성하여 가용성을 보장합니다.
2-2. 워커 노드(Worker Node)
워커 노드는 실제로 컨테이너가 실행되는 서버입니다. 매니저 노드에서 작업을 받아 그 작업을 수행하고, 필요한 경우 매니저 노드로 상태를 보고합니다. 워커 노드는 작업을 분배받는 대상일 뿐, 스웜 클러스터 전체를 관리하지는 않습니다.
2-3. 서비스(Service)
서비스는 여러 노드에서 실행되는 하나 이상의 컨테이너 그룹을 의미합니다. 도커 스웜에서 서비스는 애플리케이션의 실행 단위로, 특정 이미지를 기반으로 여러 개의 복제본을 만들고 관리합니다. 서비스는 스케일링(확장), 롤링 업데이트, 자동 복구 등의 기능을 지원합니다.
2-4. 태스크(Task)
태스크는 도커 서비스의 단위 실행 작업입니다. 각 태스크는 개별 컨테이너로 작동하며, 스웜에서 각 노드로 분배되어 실행됩니다. 즉, 하나의 서비스가 여러 개의 태스크로 구성되며, 이 태스크들이 실제로 컨테이너로 실행됩니다.
3. 도커 스웜 설치 및 초기 설정
도커 스웜을 활성화하는 것은 매우 간단합니다. 다음 명령어를 사용하여 현재 호스트를 스웜 클러스터의 매니저로 설정할 수 있습니다.
# 도커 스웜 초기화
docker swarm init
이 명령어를 실행하면 현재 서버가 매니저 노드로 설정되고, 다른 서버들이 스웜 클러스터에 조인할 수 있는 토큰이 생성됩니다. 예를 들어, 스웜 클러스터에 워커 노드를 추가하려면 다음 명령어를 사용합니다.
# 워커 노드 추가
docker swarm join --token <토큰> <매니저 노드의 IP>:2377
이 명령어를 실행하면 워커 노드가 스웜 클러스터에 참여하고, 매니저 노드가 해당 노드에 태스크를 분배할 수 있게 됩니다.
4. 도커 스웜에서 서비스 관리
스웜 모드에서 서비스를 생성하고 관리하는 방법을 알아보겠습니다.
4-1. 서비스 생성
서비스는 특정 이미지를 기반으로 컨테이너를 여러 노드에서 실행할 수 있는 방법을 제공합니다. 다음 명령어를 사용하여 서비스로 애플리케이션을 실행할 수 있습니다.
# 서비스 생성
docker service create --name my_service --replicas 3 -p 80:80 nginx
위 명령어는 3개의 복제본을 실행하는 nginx 서비스를 생성하며, 호스트의 80번 포트를 컨테이너의 80번 포트로 연결합니다.
4-2. 서비스 스케일링
스웜의 장점 중 하나는 컨테이너를 손쉽게 스케일링할 수 있다는 것입니다. 서비스를 실행한 후에 복제본의 수를 쉽게 조절할 수 있습니다.
# 서비스 스케일 조정
docker service scale my_service=5
이 명령어는 my_service의 복제본을 5개로 확장합니다. 이렇게 하면 매니저 노드가 자동으로 추가 복제본을 적절한 워커 노드로 배포합니다.
4-3. 서비스 확인
실행 중인 서비스의 상태를 확인하려면 다음 명령어를 사용할 수 있습니다.
# 서비스 상태 확인
docker service ls
이 명령어는 현재 실행 중인 서비스들의 리스트와 복제본 상태를 보여줍니다.
5. 도커 스웜에서 서비스 업데이트
도커 스웜은 서비스를 롤링 업데이트하는 기능을 제공합니다. 예를 들어, 기존 서비스의 이미지를 업데이트하려면 다음과 같이 할 수 있습니다.
# 서비스 업데이트
docker service update --image nginx:latest my_service
이 명령어는 기존의 my_service에서 사용 중인 이미지를 nginx:latest로 업데이트합니다. 도커 스웜은 자동으로 컨테이너를 하나씩 교체하며, 서비스가 중단되지 않도록 롤링 방식으로 업데이트를 수행합니다.
6. 도커 스웜과 네트워킹
스웜 클러스터에서는 기본적으로 **오버레이 네트워크(Overlay Network)**를 사용하여 각 노드 간의 네트워크 연결을 관리합니다. 오버레이 네트워크를 사용하면 여러 호스트 간에 컨테이너가 안전하게 통신할 수 있습니다.
6-1. 네트워크 생성
새로운 오버레이 네트워크를 생성하려면 다음 명령어를 사용합니다.
# 오버레이 네트워크 생성
docker network create --driver overlay my_overlay_network
이 명령어는 스웜 클러스터에서 사용할 수 있는 오버레이 네트워크를 생성합니다. 생성된 네트워크는 여러 노드에 걸쳐 컨테이너 간의 통신을 관리할 수 있습니다.
6-2. 서비스에 네트워크 연결
서비스를 생성할 때 오버레이 네트워크에 연결할 수 있습니다.
# 네트워크를 지정하여 서비스 생성
docker service create --name my_service --network my_overlay_network nginx
이 명령어는 nginx 서비스가 생성된 오버레이 네트워크를 통해 통신할 수 있도록 합니다.
7. 도커 스웜의 장점
도커 스웜은 여러 서버에서 컨테이너를 효율적으로 관리할 수 있도록 해주는 매우 강력한 오케스트레이션 도구입니다. 특히 스케일링, 롤링 업데이트, 자동 복구 등의 기능을 제공하여 컨테이너 기반 애플리케이션을 안정적으로 운영할 수 있도록 돕습니다.
7-1. 높은 가용성
매니저 노드를 복수로 설정하여 가용성을 높일 수 있습니다. 만약 한 매니저 노드가 다운되더라도, 다른 매니저 노드가 그 역할을 대신할 수 있습니다.
7-2. 손쉬운 스케일링
스웜을 사용하면 서비스의 복제본 수를 손쉽게 조절하여 트래픽이 증가할 때도 문제없이 대응할 수 있습니다. 스케일링이 필요한 상황에서 빠르게 컨테이너를 확장할 수 있습니다.
7-3. 롤링 업데이트
스웜은 애플리케이션 업데이트 시, 중단 없이 하나씩 컨테이너를 교체하는 롤링 업데이트 기능을 제공합니다. 이를 통해 서비스의 중단 없이 새로운 버전의 애플리케이션을 배포할 수 있습니다.
마무리
도커 스웜은 여러 대의 서버에서 컨테이너를 효과적으로 관리할 수 있게 해주는 도구입니다. 매니저와 워커 노드를 통해 컨테이너의 배포와 관리를 자동화하며, 높은 가용성과 확장성을 제공합니다. 스웜을 사용하면 컨테이너 기반 애플리케이션을 손쉽게 확장하고 관리할 수 있어, 대규모 환경에서도 유연하게 대응할 수 있습니다.
도커 스웜에 대한 이해를 바탕으로, 실제로 클러스터를 구성하고 서비스를 배포해보면서 그 효율성을 체험해보세요.
'Docker > Docker 강의' 카테고리의 다른 글
[Docker 강의 25편(마지막)] 도커와 서버 배포 (0) | 2024.10.08 |
---|---|
[Docker 강의 24편] 도커로 서버리스 환경 구축하기 (0) | 2024.10.08 |
[Docker 강의 22편] 도커 컨테이너 백업과 복원 (0) | 2024.10.06 |
[Docker 강의 21편] 도커 이미지 보안 관리 (0) | 2024.10.06 |
[Docker 강의 20편] 도커와 마이크로서비스 아키텍처 (0) | 2024.10.05 |