소개
이 튜토리얼에서는 강력한 컨테이너 오케스트레이션 플랫폼인 Docker Swarm 을 사용하여 다중 서비스 애플리케이션을 배포하는 과정을 살펴봅니다. Docker Compose 를 사용하여 애플리케이션의 서비스를 정의하고, Docker Swarm 스택으로 원활하게 배포하여 확장성과 고가용성을 보장하는 방법을 배울 것입니다.
이 튜토리얼에서는 강력한 컨테이너 오케스트레이션 플랫폼인 Docker Swarm 을 사용하여 다중 서비스 애플리케이션을 배포하는 과정을 살펴봅니다. Docker Compose 를 사용하여 애플리케이션의 서비스를 정의하고, Docker Swarm 스택으로 원활하게 배포하여 확장성과 고가용성을 보장하는 방법을 배울 것입니다.
Docker Swarm 은 Docker 컨테이너를 위한 기본적인 클러스터링 및 오케스트레이션 솔루션입니다. Docker 호스트 그룹을 관리하고 여러 호스트에 걸쳐 애플리케이션을 배포하여 고가용성과 확장성을 제공합니다.
Docker Swarm 은 Docker 의 내장 기능으로 Docker 호스트의 클러스터 (Swarm) 를 생성하고 관리할 수 있도록 합니다. Swarm 에서 여러 Docker 호스트 (노드) 는 하나의 가상 Docker 호스트로 함께 작동합니다. 이를 통해 애플리케이션과 서비스를 Swarm 전체에 배포할 수 있으며, Docker 는 로드 밸런싱, 확장 및 장애 복구를 처리합니다.
Docker Compose 는 다중 컨테이너 애플리케이션을 정의하고 실행할 수 있는 도구입니다. 특히 여러 서비스로 구성된 복잡한 애플리케이션을 배포해야 할 때 각 서비스마다 고유한 요구 사항이 있을 경우 유용합니다.
Docker Compose 를 사용하여 다중 서비스 애플리케이션을 배포하려면 서비스, 구성 및 연결 방식을 정의하는 docker-compose.yml 파일을 생성해야 합니다. 다음은 예시입니다.
version: "3"
services:
web:
image: labex/web-app:v1
ports:
- "80:8080"
depends_on:
- db
db:
image: labex/database:v1
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
이 예제에서는 web 및 db 두 개의 서비스가 있습니다. web 서비스는 labex/web-app:v1 이미지를 사용하고 호스트 포트 80 에서 포트 8080 을 노출합니다. 또한 db 서비스에 종속됩니다. db 서비스는 labex/database:v1 이미지를 사용하고 데이터베이스 데이터를 위한 볼륨을 마운트합니다.
애플리케이션을 배포하려면 다음 명령어를 사용할 수 있습니다.
## (필요한 경우) 이미지 빌드
docker-compose build
## 애플리케이션 배포
docker-compose up -d
docker-compose up -d 명령어는 모든 서비스를 백그라운드에서 시작합니다.
Docker Compose 를 사용하면 서비스를 쉽게 확장할 수 있는 장점이 있습니다. 예를 들어, web 서비스를 3 개의 레플리카로 확장하려면 다음을 실행할 수 있습니다.
docker-compose scale web=3
이렇게 하면 web 서비스의 인스턴스가 두 개 더 생성되고 Docker Compose 는 자동으로 트래픽을 이들 인스턴스에 균등하게 분산합니다.
다중 서비스 애플리케이션을 Docker Swarm 스택으로 배포한 후에는 다양한 명령어를 사용하여 관리 및 확장할 수 있습니다.
애플리케이션을 Docker Swarm 스택으로 배포하려면 docker stack deploy 명령어를 사용할 수 있습니다.
docker stack deploy -c docker-compose.yml my-app
이 명령어는 docker-compose.yml 파일에 있는 구성을 기반으로 Swarm 서비스를 생성합니다.
다음 명령어를 사용하여 Swarm 스택의 상태를 모니터링할 수 있습니다.
## 실행 중인 서비스 목록
docker stack services my-app
## 서비스의 태스크(컨테이너 인스턴스) 목록
docker service ps my-app_web
## 서비스의 로그 보기
docker service logs my-app_web
Swarm 스택에서 서비스를 확장하려면 docker service scale 명령어를 사용할 수 있습니다.
## "web" 서비스를 5개의 레플리카로 확장
docker service scale my-app_web=5
이렇게 하면 web 서비스의 인스턴스가 4 개 더 생성되고 Docker Swarm 은 자동으로 트래픽을 이들 인스턴스에 균등하게 분산합니다.
Swarm 스택을 새 버전의 서비스로 업데이트하려면 docker service update 명령어를 사용할 수 있습니다.
## "web" 서비스를 새로운 이미지로 업데이트
docker service update my-app_web --image labex/web-app:v2
이렇게 하면 web 서비스가 롤링 업데이트되어 서비스 중단 없이 이전 컨테이너를 새로운 컨테이너로 교체합니다.
이러한 명령어를 사용하여 Docker Swarm 스택을 효과적으로 관리하고 확장하여 다중 서비스 애플리케이션의 고가용성과 성능을 보장할 수 있습니다.
이 튜토리얼을 마치면 Docker Swarm 과 다중 서비스 애플리케이션을 배포 및 관리하는 데 Docker Swarm 을 사용하는 방법에 대한 확실한 이해를 얻게 될 것입니다. Docker Swarm 클러스터를 설정하고 Docker Compose 를 사용하여 애플리케이션의 서비스를 정의하고, 확장 가능하고 강력한 시스템으로 전체 스택을 배포할 수 있게 될 것입니다.