NGINX를 사용한 역프록시 설정 및 Docker Swarm 미세서비스 구성
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- 개발자/DevOps 엔지니어: Docker Swarm과 역프록시 설정에 관심 있는 초보자 및 중급자
- 난이도: 중간 (Docker 기본 지식 및 YAML 구성 이해 필요)
핵심 요약
- Docker Swarm 초기화는
docker swarm init
명령어로 수행하며, 워커 노드는docker swarm join
으로 추가해야 함 docker-compose.yml
파일에서 역프록시 서비스(haproxy)는80:8080
포트로 배포되며, 3개의 미세서비스(survey, auth, stats)는 노드 라벨 기반으로 배포됨- 리소스 제한 및 리플리카 수는 환경에 따라
resources
및deploy.replicas
항목을 조정해야 함
섹션별 세부 요약
1. Docker Swarm 초기화
docker swarm init
명령어로 Swarm 모드를 활성화- 워커 노드는
docker swarm join --token
명령어로 추가:2377 - 노드 라벨 추가:
docker node update --label-add db=true NODE_ID
(데이터베이스 노드) 또는worker=true NODE_ID
(워커 노드)
2. `docker-compose.yml` 파일 구성
- 데이터베이스 서비스(mongo:latest)는
node.labels.db == true
라벨 기반으로 배포 - 미세서비스(survey, auth, stats)는 각각
3
,3
,2
리플리카로 배포되며, 워커 노드에 할당 - 역프록시(haproxy)는
80:8080
포트로 배포되며,node.role == manager
라벨 기반으로 실행 - 시각화 도구(visualizer)는
8080:8080
포트로 배포되며,node.role == manager
라벨 기반으로 실행
3. 스택 배포 및 주의사항
docker stack deploy -c docker-compose.yml mystack
명령어로 스택 배포- 필수 조건: 모든 이미지가 로컬 또는 레지스트리에 미리 빌드되어 있어야 함
- haproxy 서비스는 미세서비스의 역프록시 역할 수행
- visualizer 서비스는 Docker Swarm 클러스터의 시각화 UI 제공
결론
- 역프록시 설정 시
haproxy
서비스의 포트 매핑(80:8080
)과 노드 라벨 기반 배포를 반드시 확인해야 함 - 리소스 제한(
resources.limits
)과 리플리카 수(deploy.replicas
)는 환경에 맞게 조정해야 하며, 이미지 빌드 완료 후 배포해야 성공 가능 docker-compose.yml
파일에서depends_on
설정을 통해 서비스 의존성을 명시적으로 관리해야 함