Docker Swarm 서비스 배포 방법

DockerBeginner
지금 연습하기

소개

이 튜토리얼에서는 강력한 컨테이너 오케스트레이션 도구인 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 의 강력한 컨테이너 오케스트레이션 기능을 사용하여 애플리케이션을 자신감 있게 관리할 수 있습니다.