Stack 이란
Docker Swarm에서 '스택(Stack)'을 배포하는 것은
여러 서비스, 네트워크, 볼륨 등을 포함한 애플리케이션 구성을 YAML 파일로 정의한 후,
Swarm 클러스터에 배포하는 방식입니다.
Docker Compose 파일을 기반으로 Docker Swarm 클러스터에 스택을 쉽게 배포할 수 있습니다.
Stack 정의 (docker-compose.yml)
Docker Swarm에서 스택을 배포하려면, 먼저 docker-compose.yml 파일을 만들어야 합니다.
이 파일에는 여러 서비스, 네트워크, 볼륨의 구성을 정의할 수 있습니다.
예시: docker-compose.yml
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
deploy:
replicas: 3
placement:
constraints:
- node.role == worker
networks:
- frontend
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db_data:/var/lib/mysql
networks:
- backend
networks:
frontend:
driver: overlay
backend:
driver: overlay
volumes:
db_data:
설명
서비스 정의
- web: nginx 이미지를 사용하는 웹 서버 서비스로, 복제본이 3개로 설정됨.
- constrains : 제약 조건으로 워커노드에만 배포됨.
- db: mysql 이미지를 사용하는 데이터베이스 서비스.
네트워크 정의
- frontend와 backend라는 두 개의 overlay 네트워크를 정의하여 서비스 간 통신을 관리.
볼륨 정의
- db_data라는 볼륨을 정의하여 MySQL의 데이터를 영구적으로 저장.
docker stack deploy -c docker-compose.yml <stack_name>
Stack 배포
docker-compose.yml 파일을 준비한 후,
docker stack deploy 명령을 사용하여 스택을 Swarm 클러스터에 배포합니다.
여기서는 스택 이름을 my_stack으로 지정하겠습니다.
아래 예제는 Docker Swarm이 my_stack이라는 이름으로
네트워크, 서비스, 볼륨을 생성하고 있음을 보여줍니다.
docker stack deploy -c docker-compose.yml my_stack
Creating network my_stack_frontend
Creating network my_stack_backend
Creating service my_stack_web
Creating service my_stack_db
Creating volume my_stack_db_data
docker stack ls / docker stack services / docker stack ps
Stack 상태 확인
스택의 상태를 확인하기 위해
- docker stack ls
- docker stack services
- docker stack ps
의 명령어를 사용할 수 있습니다.
# 스택 목록 확인
# my_stack 스택이 2개의 서비스를 포함하고 있음을 보여줍니다.
docker stack ls
NAME SERVICES ORCHESTRATOR
my_stack 2 Swarm
# 스택 내 서비스 확인
docker stack services my_stack
코드 복사
ID NAME MODE REPLICAS IMAGE PORTS
tmhw3ll23rwj my_stack_web replicated 3/3 nginx:latest *:80->80/tcp
xypu6k22zdqf my_stack_db replicated 1/1 mysql:latest
# 각 서비스의 작업 상태 확인
# 여기서는 각 복제본이 어느 노드에서 실행 중인지, 그리고 그 상태가 무엇인지 확인할 수 있습니다.
docker stack ps my_stack
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ab2l4j2j3pld my_stack_web.1 nginx:latest worker-1 Running Running 2 minutes ago
cd9h3xlh34f4 my_stack_web.2 nginx:latest worker-2 Running Running 2 minutes ago
ef3fjkl93dfk my_stack_web.3 nginx:latest worker-3 Running Running 2 minutes ago
lk9f2fdkljf9 my_stack_db.1 mysql:latest worker-2 Running Running 3 minutes ago
docker stack rm <stack_name>
Stack 제거
더 이상 스택을 사용하지 않으면 docker stack rm 명령을 사용하여 스택을 제거할 수 있습니다.
아래 예제는 my_stack 스택에 포함된 모든 서비스, 네트워크, 볼륨을 제거합니다.
docker stack rm my_stack
Removing service my_stack_web
Removing service my_stack_db
Removing network my_stack_frontend
Removing network my_stack_backend
Removing volume my_stack_db_data
'Infra > Docker' 카테고리의 다른 글
Docker Swarm - 시크릿 (0) | 2024.09.29 |
---|---|
Docker Swarm - 네트워크 (0) | 2024.09.29 |
Docker Swarm - 서비스 배포 및 확장 (0) | 2024.09.29 |
Docker Swarm - 노드의 승격, 레이블, 가용성 (0) | 2024.09.28 |
Docker Swarm - 시작 및 노드추가 (0) | 2024.09.25 |