docker-compose를 통해서 여러개의 컨테이너를 한번에 관리하고 실행할 수 있다.
prometheus와 grafana, node-exporter를 사용하여 모니터링 서비스를 구축한다. 이때, 세개의 컨테이너를 따로 관리하다보면 이후 수정사항이 생겼을 경우 일일이 변경해줘야한다는 문제점이 존재한다. 따라서, 이러한 불편함을 해결하기 위해서 다중컨테이너를 하나의 앱을 통해서 관리한다. 그때 우리는 docker compose를 사용하고 설정은 docker-compose.yml file을 통해서 정해준다. 이때, docker-compose.yml을 적용시키면 yml 파일에서 관리하는 다중컨테이너를 한번에 세팅해준다.
service : 사용하는 서비스를 설정한다. ex) node-exporter, prometheus, grafana 등
network : 통신시 사용하는 네트워크 목록
컨테이너 실행 순서도 관리가 가능하다.
docekr compose up
명령어를 통해서 docker-compose.yml의 설정을 적용시키고 다중 container app을 만들 수 있다.
log들이 terminal창에 계속 뜨는 것이 싫다면 docker compose up -d
를 사용한다.
version: '3.8'
networks:
monitoring:
driver: bridge
volumes:
prometheus_data: {}
services:
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.rootfs=/rootfs'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
expose:
- 9100
networks:
- monitoring
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.enable-lifecycle'
expose:
- 9090
networks:
- monitoring
global:
scrape_interval: 1m #scraping 간격을 1분단위로 설정
scrape_configs:
- job_name: "prometheus"
scrape_interval: 1m
static_configs:
- targets: ["localhost:9090"]
- job_name: "node"
static_configs:
- targets: ["node-exporter:9100"]
docker compose up
을 terminal에서 실행결과적으로 docker desktop을 이용해서 확인해본다면?
다음과 같이 3개의 컨테이너가 하나의 앱 안에서 관리되고 있는 것을 확인할 수 있다.
docker-compose.yml 파일에 grafana 서비스에 대한 내용이 없네요.