소개
이 튜토리얼에서는 강력한 컨테이너 오케스트레이션 도구인 Docker Swarm 을 사용하여 애플리케이션을 배포하고 관리하는 방법을 안내합니다. Docker Swarm 클러스터를 설정하고, 서비스를 배포하며, 확장 및 로드 밸런싱하고, 서비스를 업데이트 및 롤백하며, Docker 환경을 보호하는 방법을 배울 것입니다. 이 튜토리얼을 마치면 애플리케이션 배포 및 관리 프로세스를 간소화하기 위해 Docker Swarm 을 활용하는 방법에 대한 확실한 이해를 얻게 될 것입니다.
Docker Swarm 기본 개념
Docker Swarm 소개
Docker Swarm 은 Docker 컨테이너를 위한 기본적인 클러스터링 및 오케스트레이션 솔루션입니다. 개발자는 Docker 노드 클러스터를 생성하고 관리하여 여러 개의 물리적 또는 가상 머신을 단일하고 강력한 가상 시스템으로 변환하여 컨테이너 배포 및 관리를 수행할 수 있습니다.
Docker Swarm 의 주요 개념
Docker Swarm 은 컨테이너 오케스트레이션을 위해 몇 가지 중요한 개념을 소개합니다.
| 개념 | 설명 |
|---|---|
| Swarm 모드 | Docker 의 기본 클러스터링 모드 |
| 매니저 노드 | Swarm 클러스터를 제어 및 관리하는 노드 |
| 작업자 노드 | 컨테이너 작업 부하를 실행하는 노드 |
| 서비스 | 배포할 컨테이너화된 애플리케이션을 정의하는 개체 |
아키텍처 개요
graph TD
A[매니저 노드] --> B[작업자 노드 1]
A --> C[작업자 노드 2]
A --> D[작업자 노드 3]
Swarm 클러스터 초기화
Docker Swarm 클러스터를 시작하려면 Ubuntu 22.04 에서 다음 명령어를 사용합니다.
## Docker 설치
sudo apt-get update
sudo apt-get install docker.io
## Swarm 모드 초기화
docker swarm init
## 클러스터 상태 확인
docker info | grep Swarm
노드 관리
노드를 Swarm 에 가입하려면 매니저에서 생성한 가입 토큰이 필요합니다.
## 매니저 노드에서: 가입 토큰 생성
## 작업자 노드에서: Swarm에 가입
서비스 배포 기본 사항
Swarm 전체에 간단한 서비스를 생성하고 배포합니다.
## 3개의 복제된 nginx 서비스 배포
docker service create --replicas 3 --name web nginx
이 명령은 Swarm 클러스터 전체에 분산된 동일한 nginx 컨테이너 인스턴스 3 개를 생성하여 Docker Swarm 의 핵심 컨테이너 오케스트레이션 기능을 보여줍니다.
클러스터 구성
Swarm 초기화 전략
Docker Swarm 클러스터 구성은 전략적인 노드 관리와 정확한 네트워크 구성을 포함합니다. 초기화 과정은 클러스터의 기본적인 아키텍처와 통신 프로토콜을 결정합니다.
노드 역할 및 구성
graph TD
A[매니저 노드] -->|제어| B[작업자 노드]
A -->|관리| C[서비스 배포]
A -->|감시| D[클러스터 상태]
| 노드 유형 | 책임 | 권장 수량 |
|---|---|---|
| 매니저 노드 | 클러스터 관리, 오케스트레이션 | 3-5 노드 |
| 작업자 노드 | 컨테이너 실행 | 확장 가능 |
네트워크 구성 명령어
특정 IP 및 인터페이스로 Docker Swarm 네트워크를 구성합니다.
## Swarm용 네트워크 인터페이스 지정
docker swarm init --advertise-addr eth0:2377
## 현재 네트워크 구성 보기
docker info | grep -A 5 Swarm
고급 노드 구성
특정 레이블 및 제약 조건을 가진 노드를 추가합니다.
## 사용자 지정 레이블이 있는 노드 추가
docker node update --label-add type=backend node1
## 특정 노드 유형에 서비스 배포
docker service create --constraint node.labels.type==backend nginx
보안 및 인증
노드 가입 토큰을 안전하게 관리합니다.
## 작업자 가입 토큰 재생성
docker swarm join-token worker -q
## 매니저 가입 토큰 회전
docker swarm join-token manager -q
서비스 배포
서비스 생성 기본 원리
Docker Swarm 서비스는 클러스터 전체에 걸쳐 분산된 컨테이너 관리를 가능하게 하여 애플리케이션 배포의 핵심 단위를 나타냅니다.
graph LR
A[Docker 서비스] --> B[컨테이너 복제본]
A --> C[로드 밸런싱]
A --> D[롤링 업데이트]
기본 서비스 배포 전략
| 배포 유형 | 설명 | 명령어 예시 |
|---|---|---|
| 복제 모드 | 고정된 수의 컨테이너 | docker service create --replicas 3 |
| 전역 모드 | 노드당 하나의 컨테이너 | docker service create --mode global |
서비스 생성 예시
특정 구성으로 웹 애플리케이션을 배포합니다.
## 사용자 지정 설정으로 웹 서비스 생성
docker service create \
--name webapp \
--replicas 5 \
--publish 8080:80 \
--update-parallelism 2 \
--update-delay 10s \
nginx:latest
고급 서비스 관리
서비스를 동적으로 확장하고 업데이트합니다.
## 서비스 인스턴스 확장
docker service scale webapp=10
## 롤링 업데이트 수행
docker service update \
--image nginx:latest \
--update-parallelism 2 \
--update-delay 10s \
webapp
서비스 제약 조건 및 배치
노드 제약 조건으로 서비스 배포를 구성합니다.
## 특정 노드 유형에 서비스 배포
docker service create \
--constraint node.labels.type==web \
--name frontend \
nginx:alpine
요약
"Docker Swarm 을 이용한 애플리케이션 배포 및 관리"에 대한 이 포괄적인 튜토리얼은 애플리케이션 배포 및 관리에 Docker Swarm 을 효과적으로 활용할 수 있는 지식과 기술을 제공했습니다. Docker Swarm 클러스터를 설정하고, 서비스를 배포하며, 서비스를 확장 및 로드 밸런싱하고, 서비스를 업데이트 및 롤백하며, Docker 환경을 보호하는 방법을 배웠습니다. 이러한 기술을 통해 이제 Docker Swarm 의 강력한 컨테이너 오케스트레이션 기능을 사용하여 애플리케이션을 자신감 있게 관리할 수 있습니다.



