Giter Club home page Giter Club logo

managed-docker-stack-service's Introduction

Managed Docker Stack Service

Managed Docker Stack Service 는 Docker Stack 기반의 사용자 맞춤 WEB & Blog 배포 개인 프로젝트 입니다


1. 프로젝트 개요

1.1 프로젝트 주제

  • Managed Docker Stack Service 는 사용자 요구 사항에 맞는 Docker Stack 을 배포하여 Web & Blog 서비스를 제공해주는 프로젝트 입니다. 사용하기 어려운 CLI 환경이 아닌, 그래픽 환경인 Dialog 로 제공하여 사용자가 더 쉽게 배포 & 조회 & 삭제 할 수 있는 프로그램을 구현하고자 합니다

1.2 프로젝트 동기

  • Docker Swarm Mode 환경에서 사용자 요청에 맞게 이미지를 생성하고, 컨테이너를 묶어 Stack 으로 배포해주는 서비스를 제공하고자 주제를 선정하였습니다. 또한, 해당 서비스를 관리자 입장에서 모니터링 해보는 경험을 쌓기 위해 모니터링 환경도 구축하여 적용해보고자 합니다. 이를 통해 기존의 학습 내용에 대한 이해도 강화와 프로젝트 진행을 통한 경험을 쌓는 것을 목표로 삼고자 선정했습니다

1.3 프로젝트 배경

  1. Docker Stack Mode 환경에서 사용자 요구 사항에 맞는 서비스 배포
  2. Grafana & Prometheus 를 통한 모니터링 환경 구축
  3. Harbor 를 통한 Private Regisry 구축
  4. Dialog 를 통한 Gui 환경의 프로그램 구축
  5. 쉽고 간편한 배포 & 조회 & 삭제 프로세스

2. 프로젝트 구조 및 기술

2.1 기술 스택

  • 개발 환경: LINUX
  • Container 배포 : Docker, Docker Swarm Mode
  • 모니터링 : Cadvisor, Prometheus, Grafana
  • 사설 저장소 : HARBOR

2.2 Node 구조

  • Manger Node : Dialog, Image 생성, Worker Node 에 명령 전달과 같은 주 기능
  • Worker Node : 서비스의 주 컨테이너들이 위치, Image Pull 을 통한 컨테이너 배포
  • Repo Node : Harbor 를 이용한 사설 저장소가 위치하며, 각 Node 들에게 Image PUSH & PULL 을 제공합니다

2.3 Monitoring 구조

  • cAdvisor 와 Node Exporter 가 위치하며, cAdvisor 는 Container 환경을, Node Exporter 는 Node 의 환경에 대한 자원 사용량과 같은 Data 를 모니터링 합니다
  • Grafana 와 Prometheus 가 위치하며, Prometheus 는 Service Discovery 를 참조하여, Target 의 Data 를 Metrics Api 방식으로 수집하는 Pull 방식을 사용합니다. 이를 통해 cAdvisor 와 Node Exporter 의 Metric 을 수집하고 분석하여 Grafana 를 통해 시각화합니다

2.4 Network 구조

  • Node 의 Network 는 VMware 의 NAT Network 로 211.183.3.0 대역을 사용하며, Manager Node 와 Worker Node 는 Cluster 환경을 구성하여 Ingress Network 를 사용합니다
  • Stack 배포시 사설 Overlay Network 를 생성하여 Haproxy 를 통해 다른 Container 에게 접근하게 구성합니다

3. 프로젝트 개발

3.1 프로젝트 개발 과정

  1. 프로젝트 준비
  • 프로젝트 주제 선정
  • 프로젝트 사용 기술 조사
  • 프로젝트 구조 설계
  • 개발 환경 구성
  1. 프로젝트 구현
  • Dialog 구현
  • 주요 기능 구현
  • Harbor 저장소 구축
  • 모니터링 환경 구축
  1. 유지 보수
  • 주요 기능 오류 수정
  • Dialog 오류 방지 기능 구현
  • 기능 Test

3.2 개발 내용


4 프로젝트 결과

4.1 메인 화면

4.2 Stack 배포

  • 사용자로부터 STACK 이름, 배포할 Service 종류, Replicas 수, Clone 할 Github 주소 순으로 입력 받습니다
  • 만약, Data 를 입력하지 않고 OK 를 누르거나, Cancel 을 누르면, 배포 프로세스를 종료 후 Main Menu 로 돌아갑니다

  • Web 서비스의 종류에는 Nginx & Haproxy 서비스, Httpd & Haproxy 서비스 가 있으며, Haproxy 는 manager, nginx 및 httpd 는 worker 에 배포하여 서비스를 제공해줍니다

  • Blog 서비스는 Wordpress & Mysql & Haproxy 이며, Mysql 과 Haproxy 는 manager, wordpress 는 worker 에 배포되며, manager 에서 mysql 를 위한 볼륨을 제공해줍니다

  • 배포 완료 후, 해당 Stack 의 Network 정보를 출력해줍니다. Stack 배포시, Image 생성 & Image Push & 컨테이너 배포 & Overlay Network 생성이 이루어집니다

4.3 Stack 조회

  • 배포된 Stack list 를 확인할 수 있으며, 선택시 Stack 의 Container 정보 및 Network 정보를 확인할 수 있습니다

4.4 Stack 삭제

  • 삭제할 Stack 을 선택하고, 최종 확인을 누르면, 배포된 Stack 과 배포된 Overlay Network 를 삭제해줍니다

  • Wordpress STACK 삭제시, 생성된 Volume 역시 삭제됩니다

4.5 Monitoring

  • cAdvisor 를 통해 각 Node 의 컨테이너 환경을 모니터링 합니다. CPU 사용률, 메모리 사용량, 동작중인 컨테이너 수를 실시간으로 모니터링 가능합니다

4.6 Image 저장

  • Stack 배포시 Image 를 생성하여 Harbor 에 Push 합니다. 이는 Web 서비스 배포시에만 해당합니다

5. 프로젝트 소감

  • 이번 프로젝트를 진행하며 모든 순간이 순탄하지는 않았습니다. 대표적으로 오류 수정에서 가장 큰 어려움을 느꼈던 것 같습니다. 발생한 문제에는 wordpress 연결 문제, Dialog 절차 문제, Stack 배포시 Image 를 못 찾는 문제가 있었습니다. 문제가 발생한 순간마다 해당 문제를 해결할 때까지 자리에서 벗어날 수가 없었습니다. 허나, 이 해결 과정은 결코 고통스럽지 않았습니다. 오히려 고민과 생각, 그리고 수많은 시도를 할 때마다 즐거웠고, 문제를 해결하면 생기는 기쁨의 도파민 덕분에 문제 해결에 즐거움을 느꼈습니다

managed-docker-stack-service's People

Contributors

lijahong avatar

Stargazers

 avatar

Watchers

 avatar

Forkers

rheehot

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.