kok202
도커 강의 정리 ( 3강 : 스택(docker-compose.yml) )

2019. 6. 7. 04:32[정리] 기능별 개념 정리/Docker

서비스 = docker-compose.yml 안에 존재하는 하나의 이미지 정보

스택 = docker-compose.yml

 

1강, 2강에서는 하나의 서비스를 사용했었다.

그런데 app.py 프로젝트는 Redis 를 필요로하고 그래서 redis를 추가해서 배포하고자 한다.

 

 

 

 

 

도커 스웜을 시각화해주는 Visualizer 이미지 추가하기

docker-compose.yml 을 수정한다.

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: kok202/myRepository:v1.0.0
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  
  # 클러스터 환경을 확인할 수 있는 gui 툴
  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:

 visualizer를 추가했다.

* mac 의 경우 docker.sock에 바로 접속할 수 없는 문제가 있고 이에대한 해결법은 강의를 참조한다. (약 10분 부터)

https://www.youtube.com/watch?v=X--WPFfSbFc&list=PLfI752FpVCS84hxOeCyI4SBPUwt4Itd0T&index=3

 

eval $(docker-machine env myvm1)

세션을 docker swarm 에 연결한다.

docker stack deploy -c docker-compose.yml myApplication

docker-compose.yml 을 배포한다.

 

http://192.168.99.100:8080 

 

에 접근해서 visualizer 가 동작하는지 확인한다.

 

 

 

 

 

docker-compose.yml 에 레디스 이미지도 추가하기

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: kok202/myRepository:v1.0.0
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  
  # 클러스터 환경을 확인할 수 있는 gui 툴
  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
      
  # app.py 에서 redis를 사용하고 있어서 추가합니다.
  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:

레디스가 포함된 docker-compose.yml 을 재배포한다.

docker stack deploy -c docker-compose.yml myApplication

레디스는 인메모리 DB 인데 이 때문에 재배포할 때마다 데이터가 사라진다. DB 에 데이터를 영속화 하기 위해서 volumes, deploy 정보가 들어가있다.

1. 볼륨을 맵핑해서 redis 데이터가 영속화 되는 경로를 동일한 경로에 저장하도록 하였다.

2. 배포되는 곳을 host 로 고정한다.

 

 

 

 

 

 

현재까지 진행한 프로젝트 정리

docker swarm 에는 2개의 가상 머신이 동작하고 있다.

 

docker-compose.yml 이라는 스택에는 3개의 서비스가 들어가있다.

  • web 이라는 서비스 1개
  • visualizer 라는 서비스 1개
  • redis 라는 서비스 1개 

web 이라는 서비스는 kok202/myRepository:v0.0.1 이미지를 사용한다.

visualizer 이라는 서비스는 dockersamples/visualizer:stable 이미지를 사용한다.

redis 이라는 서비스는 redis 이미지를 사용한다.