도커(Docker)

준비중..

도커(Docker)

개발과 배포를 간편하게!

07 도커 스택(stacks)

# 도커 스택 ## 목차 1. 도커 스택이란? 2. Visualizer 추가 3. Redis 추가 ## 도커 스택이란? 도커 스택이란, 분산 어플리케이션의 최상위 계층이다. 한 도커 스택으로 어플리케이션을 구성할 수 있다. 뿐만 아니라, 다수의 스택을 통해 고도의 어플리케이션 구성도 가능하다. 앞서, 단일 스택으로 서비스를 운영하는 연습을 했다. 사실 이러한 구성은 프로덕션에 어울리지 않는다. 이에 어울리는 스택 구성을 연습해보자. ## Visualizer 추가 ### docker-compose.yml 재설정 docker-compose.yml에 visualizer를 추가하자. ``` version: "3" services: web: # replace username/repo:tag with your name and image details image: username/repo:tag deploy: replicas: 5 restart_policy: condition: on-failure resources: limits: cpus: "0.1" memory: 50M ports: - "80:80" networks: - webnet visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] networks: - webnet networks: webnet: ``` 위 설정의 `volumes`은 도커 머신이 호스트의 파일(or 공유 폴더)에 접근할 수 있게 한다. `placement`는 비쥬얼라이저가 스웜 매니저 위에서만(never worker) 동작하는데 사용됐다. ### 도커 머신 준비 `docker-machine ls` 명령으로 머신 상태 확인. 호스트에서 스웜 매니로 연결 ``` eval $(docker-machine env myvm1) ``` ### 재배포 ``` docker stack deploy -c docker-compose.yml getstartedlab ``` ### 동작 확인 프로세스 확인 ``` docker stack ps getstartedlab Updating service getstartedlab_web (id: angi1bf5e4to03qu9f93trnxm) Creating service getstartedlab_visualizer (id: l9mnwkeq2jiononb5ihz9u7a4) ``` 비쥬얼라이저 접속 ![](https://docs.docker.com/get-started/images/get-started-visualizer1.png) ## Redis 추가 Visualizer를 추가했던 것처럼, Redis를 추가하며 다시한번 이를 연습해보자. ### docker-compose.yml 작성 `docker-compose.yml`에 redis를 추가한다. ``` version: "3" services: web: # replace username/repo:tag with your name and image details image: username/repo:tag deploy: replicas: 5 restart_policy: condition: on-failure resources: limits: cpus: "0.1" memory: 50M ports: - "80:80" networks: - webnet visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] networks: - webnet redis: image: redis ports: - "6379:6379" volumes: - "/home/docker/data:/data" deploy: placement: constraints: [node.role == manager] command: redis-server --appendonly yes networks: - webnet networks: webnet: ``` ### 볼륨 설정 매니저 노드에 `/data` 디렉토리를 만든다. ``` docker-machine ssh myvm1 "mkdir ./data" ``` ### 매니저 노드 접속 ``` docker-machine ls docker-machine env myvm1 eval $(docker-machine env myvm1) ``` ### 스택 배포 접속한 매니저 노드상에서 스택을 배포한다. ``` docker stack deploy -c docker-compose.yml getstartedlab ``` ### 정상 작동 확인 서비스가 잘 동작하는지 확인한다. ``` $ docker service ls ID NAME MODE REPLICAS IMAGE PORTS x7uij6xb4foj getstartedlab_redis replicated 1/1 redis:latest *:6379->6379/tcp n5rvhm52ykq7 getstartedlab_visualizer replicated 1/1 dockersamples/visualizer:stable *:8080->8080/tcp mifd433bti1d getstartedlab_web replicated 5/5 gordon/getstarted:latest *:80->80/tcp ``` ### 웹 브라우저를 통한 확인 웹 서비스 접속 ![](https://docs.docker.com/get-started/images/app-in-browser-redis.png) 비쥬얼라이저 접속 ![](https://docs.docker.com/get-started/images/visualizer-with-redis.png) ## 레퍼런스 + Get Started, Part 5: Stacks (https://docs.docker.com/get-started/part5/)