Profile picture

[Docker Swarm] Docker Stack

JaehyoJJAng2024년 04월 06일

▶︎ Docker Stack

Docker-Compose가 여러 개의 컨테이너로 구성된 애플리케이션을 관리하기 위한 도구라면,

Docker Stack여러 개의 서비스로 구성된 애플리케이션을 관리하기 위한 도구이다.

서비스를 관리하기 때문에 Docker Stack은 오직 Docker Swarm Mode에서만 사용할 수 있다.


docker stack의 구조는 Docker Compose와 비슷하지만 지원하는 옵션이나 내부 로직에서 차이점이 존재한다.

Docker Compose의 경우 기본 네트워크가 Bridge Network로 생성되지만,

Docker Stack의 경우 Overlay 네트워크가 기본 네트워크로 생성된다.

또한 links, container_name, privileged 등 도커 컴포즈에서는 지원되던 속성들이

Docker Stack에서는 지원되지 않으므로 Docker stack에서 어떤 옵션을 지원하는지 잘 찾아봐야한다.


‣ 사용 방법

Docker Stack의 사용법은 매우 간단하다.

먼저 다음과 같이 Swarm Cluster를 구성해주자. (해당 실습에서는 매니저 노드 1개 - 워커노드 2개로 구성됨)

docker node ls

# output
dfdfgdfgdfgdfoorrewddsadf *   master    Ready     Active         Leader           20.10.13
gggorepvvbnmdsksdwqwerooq     node1     Ready     Active                          20.10.13
dfoee34adfaffzdweeerrrwwg     node 2    Ready     Active                          20.10.13

그리고 다음과 같이 YAML 파일로 서비스를 정의해주자.

services:
  monitoring:
    image: dockersamples/visualizer
    ports:
      - "4555:8080"
    volumes:
      - type: bind
        source: /var/run/docker.sock
        target: /var/run/docker.sock
    deploy:
      mode: global
      placement:
        constraints:
          - node.role == manager
  web:
    image: xxxx/wtt-blog:1.05
    ports:
      - "3000:8888"
    deploy:
      mode: global
      placement:
        contraints:
          - node.role == worker

워커 노드에는 django 기반의 WAS를 배포하고 매니저 노드에는 visualizer를 배포해주도록 설정해주었다.

visualizerswarm node에서 노드와 컨테이너의 분포 상태를 시각적으로 볼 수 있게 해주는 도구이다.


그 다음 docker stack deploy 명령어로 서비스를 배포해주자.

-c 옵션으로 배포할 서비스가 정의된 YAML 파일 지정이 가능하다.

docker stack deploy -c <yaml-file> <stack-name>

또한 docker stack ps 명령어로 스택이 관리하는 서비스의 상태 확인이 가능하다.

docker stack ps <stack-name>

Loading script...