패스트캠퍼스 캐시백 챌린지 56일차
Docker Compose를 활용해서 Grafana와 MYSQL을 구성하는 내용의 클립을 수강하는식으로 챌린지를 진행하였다. grafana만 단독으로 services를 갖는 container를 띄우고 grafana와 mysql을 연동하는 container를 운영해보는식으로 depends on 옵션이 어떤식으로 사용되는지 명확하게 알 수 있어서 좋았다. Docker에 관한 내용은 여기까지이고 다음 포스팅으로는 Kubernetes의 개요에 관한 내용을 포스팅할 예정이다.
Grafana 구성하기
- Grafana의 3000번 포트는 호스트의 3000번 포트와 바인딩
- Grafana의 설정파일인 grafana.ini는 호스트에서 주입 가능하도록 구성하고 읽기전용 설정
- Grafana의 로컬 데이터 저장 경로를 확인하여 도커 볼륨 마운트
- Grafana의 플러그인 추가 설치를 위한 환경변수 설정
- 로그 드라이버 옵션을 통해 로그 로테이팅
Grafana + MySQL 구성하기
- 요구사항
⇒ 1단계 요구사항 포함
⇒ grafana.ini를 통해 database 설정을 sqlite에서 MySQL로 변경
⇒ MYSQL 컨테이너를 docker-compose에 db 서비스로 추가
⇒ grafana 서비스가 db 서비스를 database로 연결하도록 구성
⇒ MySQL의 로컬 데이터 저장 경로 확인하여 도커 볼륨 마운트
참고자료
- Grafana Docker Guide
⇒ https://grafana.com/docs/grafana/latest/installation/docker/
- MYSQL Docker Guide
⇒ https://hub.docker.com/_/mysql
Grafana 실습
실습환경은 하단의 링크를 통해 확인할 수 있다.
https://github.com/tedilabs/fastcampus-devops/tree/main/3-docker-kubernetes/lab-docker-grafana
cd grafana-only
cat docker-compose.yml
docker-compose.yml 파일에서 version에서 3.9버전으로 명시되어있으며, services로 grafana 하나만 존재한다. volumes에서는 grafana-data 라는 볼륨이 하나 만들어져있고, networks는 존재하지 않는 상태이다. networks는 명시되지 않으면 해당프로젝트의 default명으로 bridge network가 생성된다고 한다.
grafana service의 image는 8.2.2버전을 사용하고 restart로 unless-stopped 정책을 사용한다. 이는 always보다 강력한 옵션으로 서버가 재시작되더라도 컨테이너를 다시 띄우게 된다.(컨테이너가 시작되어있는 것을 보장한다.)
환경변수로는 GF-INSTALL-PLUGINS가 설정되어있고,
PORTS는 host의 3000번 포트가 컨테이너의 3000번 포트와 연결되어있다.
etc/grafana/grafana.ini 는grafana 컨테이너가 기본적으로 불러들이는 grafana의 설정파일이 위치한 위치의 파일이다. 이것을 host상의 files/grafana.ini로 읽기전용 마운트 시키는 것을 확인할 수 있다.
grafana-data 볼륨도 /var/lib/grafana 로컬 데이터 저장소로 마운트 하고 있다.
logging의 경우 json-file 형태로 stderr,stdout으로 로그를 출력을 하게된다.
curl 명령어를 통해 응답이 잘 오고있는 것을 확인할 수 있다.
$ ec2metadata
ec2metadata 명령어를 통해 public ipv4 주소를 확인하고 주소창에 :3000 을 통해 접속해보자.
grafana의 기본 사용자 값은 username: admin password:admin이다.
왼쪽 탭의 방패모양을 클릭해 Server Admin 페이지에 진입하면 Settings에서 여러 설정들을 확인할 수 있다.
database는 기본적으로 sqlite으로 설정되어있고, 경로가 grafana.db를 바라보게 되어있다.
# 볼륨포함하여 전부 제거
$ docker-compose down -v
grafana만 존재하던 내용의 컨테이너는 전부 제거해주고 mysql을 포함한 내용쪽으로 넘어가주자.
cd ..
cd grafana-mysql
cat docker-compose.yml
이번에는 아까와는 다르게 db라는 service가 추가되었음을 확인할 수 있다. 도커 공식문서의 mysql 이미지에 대한 문서를 살펴보면 “Where to Store Data” subsection에서 /var/lib/mysql로 명시되어있기에 해당 내용을 마운트 해주는 모습이다.
db컨테이너가 만들어진 후에 grafana 컨테이너가 만들어질 수 있도록 depends_on 속성도 추가되었다.
grafana.ini 를 확인해보면 database에 대한 내용이 설정되어있는 것을 확인할 수 있다.
grafana의 port binding이 완료된 것을 확인할 수 있다.
이번에도 로그인을 하여 Server admin을 확인해보면 mysql db로 적용이 된 것을 확인할 수 있다!
만약 컨테이너를 제거할때 v 옵션을 주지않는다면, volume은 남아있게 된다. 따라서 grafana user 사용자를 따로 추가해주었다면 컨테이너를 다시 없앤뒤에 실행하였을때 해당 데이터가 보존되어있어 해당 user로 다시 로그인 할 수 있게된다. 이런식으로 docker volume을 통해 host에 데이터를 영구적으로 보관할 수 있다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
* 본 포스팅은 패스트캠퍼스 환급 챌린지를 위해 작성되었습니다.