prometheus와 grafana를 docker로 배포하기 위하여 docker-compose 파일을 작성하던 도중 갑자기 volumes 속성이 너무 헷갈렸다,, 그래서 이번 포스팅에서는 docker-compse파일과 volumes 속성에 대해서 알아보고자 한다.
우선 docker-compose 란 복수의 컨테이너를 정의하고 실행하기 위한 도구이다.
즉 복수의 컨테이너를 docker run 시키는게 아닌 docker-compose로 한번에 실행할 수 있는 것이다.
docker-compose 를 구성하기 위해서는 docker-compose.yml 파일을 작성해야 한다 !
아래는 prometheus와 grafana 를 docker 로 배포하기 위하여 작성한 docker-compose.yml 파일이다.
version: '3.8'
services:
prometheus:
user: "root"
image: prom/prometheus
container_name: prometheus_container
volumes:
- ./prometheus/config:/etc/prometheus # 설정 파일
- ./prometheus/volume:/prometheus/data # 수집한 metric 데이터 저장소
ports:
- 9090:9090
command:
- '--web.enable-lifecycle'
- '--config.file=/etc/prometheus/prometheus.yml'
restart: always
networks:
- promnet
grafana:
user: "root"
image: grafana/grafana
container_name: grafana_container
ports:
- 3000:3000
volumes:
- ./grafana/volume:/var/lib/grafana
restart: always
networks:
- promnet
networks:
promnet:
driver: bridge
: docker-compose 파일의 버전이다.
: docker-compose 파일로 배포하고자 하는 서비스(컨테이너)이다.
: 컨테이너가 사용할 이미지이다.
: 만약 도커 허브에 있는 이미지가 아니라 직접 Dockerfile 로 이미지를 빌드하여 사용할 때 사용한다.
위의 예시에는 grafana/grafana 라는 이미지를 사용하여 컨테이너를 만들기 때문에 build 속성을 쓰지 않았다.
build:
context: .
dockerfile: Dockerfile
만약 위와 같이 있으면 해당 하는 폴더에 있는 모든 파일을 빌드에 사용한다는 것이고 Dockerfile을 통해 이미지를 생성한다는 뜻이다.
(⚠️ 보통 Dockerfile이름은 Dockerfile로 파일 이름을 짓기 때문에 생략해도 무관 !)
: {컨테이너 외부}:{컨테이너 내부} 와 같이 노출시킬 포트를 매핑하는 옵션이다.
: 도커 볼륨 혹은 호스트 볼륨을 마운트하여 사용한다.
쉽게 말하자면, 호스트와 Docker 컨테이너 사이에 파일이나 디렉토리를 공유하기 위해 사용하는 것이다 !
: 순서는 <호스트 경로>:<컨테이너 경로>이다.
volumes:
- ./prometheus/config:/etc/prometheus
이렇게 했을 때의 장점은,
컨테이너를 삭제해도 설정 파일이 호스트에 남아있다.
Prometheus, Grafana는 로그/데이터 저장이 필수인데, 컨테이너를 재시작해도 데이터가 유지가능하다.
호스트가 설정 파일을 수정하면 컨테이너가 바로 반영하다 (🔥hot reload)
: 컨테이너가 속할 네트워크이다. 기본적으로 컨테이너들끼리는 같은 네트워크에 속해있어야 통신이 가능하다.
https://byungwoo.oopy.io/2758a690-6ec7-42d0-ae41-5ebc75f4e57a