일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- docker swarm
- 온프레미스
- transit gateway
- Await
- DynamoDB
- null 병합 연산자
- Proxy Resource
- elasticsearch
- 옵셔널 체이닝
- CloudFormation
- api gateway
- 비구조화 할당
- Site-to-Site VPN
- Kubernetes
- vgw
- Endpoints
- AWS
- 구조분해 할당
- optional chaining
- prometheus
- 자바스크립트
- grafana
- docker
- Custom Resource
- VPC
- Service
- JavaScript
- 단축 평가
- On-Premise
- cognito
- Today
- Total
만자의 개발일지
[Docker] Docker Stack이란? 본문
Docker Stack
Docker Compose가 여러 개의 컨테이너로 구성된 어플리케이션을 관리하기 위한 도구라면, Docker Stack은 여러 개의 서비스로 구성된 어플리케이션을 관리하기 위한 도구입니다. 서비스를 관리하기 때문에 Docker Stack은 Swarm mode에서만 사용할 수 있습니다.
Docker Stack의 구조는 Docker Compose와 비슷하지만 지원하는 옵션이나 내부 로직에서 차이가 있습니다.
Docker Compose는 기본 네트워크가 브릿지 네트워크로 생성되지만 Docker Stack은 Overlay 네트워크가 생성됩니다.
또한 links, devices, privileged 등등 Docker Compose 에서는 지원하는 옵션들이 Docker Stack 에서는 지원하지 않으므로 Docker Stack이 어떤 옵션을 지원하는지 잘 찾아보고 사용하셔야 합니다.
Docker Stack 사용하기
Docker Stack의 사용 방법은 매우 간단합니다.
먼저 다음과 같이 Swarm Cluster를 구성해줍니다. 매니저 노드 1개와 워커 노드 2개로 구성해 주었습니다.
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
ob8gjt15kes3rd3o9bv1komse * ip-10-0-0-206.ap-northeast-2.compute.internal Ready Active Leader 20.10.13
gkofukpbdg4pe9rnxv9fyaffz ip-10-0-10-154.ap-northeast-2.compute.internal Ready Active 20.10.13
z7y2xasu8rug8g7bmoealq39a ip-10-0-11-168.ap-northeast-2.compute.internal Ready Active 20.10.13
그다음 예시로 다음과 같이 YAML 파일로 서비스를 정의해줍니다.
version: "3.9"
services:
monitoring:
image: dockersamples/visualizer
ports:
- "9000:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
deploy:
mode: global
placement:
constraints:
- node.role == manager
web:
image: nginx
ports:
- "80:80"
deploy:
mode: global
placement:
constraints:
- node.role == worker
워커 노드에는 nginx를 배포하고 매니저 노드에는 visualizer를 배포해주도록 설정해 주었습니다.
visualizer는 Swarm mode에서 노드와 컨테이너의 분포상태를 시각적으로 볼 수 있게해주는 도구입니다.
그다음 docker stack deploy 명령어로 서비스를 배포해줍니다. -c 옵션으로 배포할 서비스가 정의된 YAML 파일을 지정해줄 수 있습니다.
$ docker stack deploy -c <yaml-file> <stack-name>
배포가 정상적으로 완료되었다면 매니저 노드의 visualizer로 Swarm 클러스터내 서비스의 상태를 모니터링할 수 있습니다.
또한 docker stack ps 명령어로 스택이 관리하는 서비스의 상태를 확인할 수 있습니다.
$ docker stack ps <stack-name>
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
v0p8lbctx6s5 demo_monitoring.ob8gjt15kes3rd3o9bv1komse dockersamples/visualizer:latest ip-10-0-0-206.ap-northeast-2.compute.internal Running Running 15 seconds ago
rxdkyr2245vx demo_web.gkofukpbdg4pe9rnxv9fyaffz nginx:latest ip-10-0-10-154.ap-northeast-2.compute.internal Running Running 34 seconds ago
8ghp5gcphwsw demo_web.z7y2xasu8rug8g7bmoealq39a nginx:latest ip-10-0-11-168.ap-northeast-2.compute.internal Running Running 34 seconds ago
마지막으로 docker stack rm 명령어로 생성한 스택을 삭제합니다. 스택이 삭제되면 스택이 관리하던 서비스와 네트워크 모두 삭제됩니다.
$ docker stack rm <stack-name>
'Docker' 카테고리의 다른 글
[Docker] Docker Network (docker0와 veth) (2) | 2022.08.01 |
---|---|
[Docker] WARNING: bridge-nf-call-iptables is disabled 해결 방법 (0) | 2022.08.01 |
[Docker] WARNING: IPv4 forwarding is disabled 해결 방법 (0) | 2022.08.01 |
[Docker] Docker Swarm Worker Node에만 서비스 배포하기 (0) | 2022.07.28 |
[Docker] Docker Swarm host mode로 서비스 생성하기 (0) | 2022.07.27 |