[docker] docker-compose.yml 파일

지구본욱·2025년 4월 8일

prometheus와 grafana를 docker로 배포하기 위하여 docker-compose 파일을 작성하던 도중 갑자기 volumes 속성이 너무 헷갈렸다,, 그래서 이번 포스팅에서는 docker-compse파일과 volumes 속성에 대해서 알아보고자 한다.

1. docker-compose란 ?

우선 docker-compose 란 복수의 컨테이너를 정의하고 실행하기 위한 도구이다.

즉 복수의 컨테이너를 docker run 시키는게 아닌 docker-compose로 한번에 실행할 수 있는 것이다.


2. docker-compose.yml

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

1. version

: docker-compose 파일의 버전이다.

2. service

: docker-compose 파일로 배포하고자 하는 서비스(컨테이너)이다.

3. images

: 컨테이너가 사용할 이미지이다.

4. build

: 만약 도커 허브에 있는 이미지가 아니라 직접 Dockerfile 로 이미지를 빌드하여 사용할 때 사용한다.
위의 예시에는 grafana/grafana 라는 이미지를 사용하여 컨테이너를 만들기 때문에 build 속성을 쓰지 않았다.

build:
context: .
dockerfile: Dockerfile

만약 위와 같이 있으면 해당 하는 폴더에 있는 모든 파일을 빌드에 사용한다는 것이고 Dockerfile을 통해 이미지를 생성한다는 뜻이다.
(⚠️ 보통 Dockerfile이름은 Dockerfile로 파일 이름을 짓기 때문에 생략해도 무관 !)

5. ports

: {컨테이너 외부}:{컨테이너 내부} 와 같이 노출시킬 포트를 매핑하는 옵션이다.

6. volumes

: 도커 볼륨 혹은 호스트 볼륨을 마운트하여 사용한다.
쉽게 말하자면, 호스트와 Docker 컨테이너 사이에 파일이나 디렉토리를 공유하기 위해 사용하는 것이다 !
: 순서는 <호스트 경로>:<컨테이너 경로>이다.

volumes:
- ./prometheus/config:/etc/prometheus

이렇게 했을 때의 장점은,

  • 컨테이너를 삭제해도 설정 파일이 호스트에 남아있다.

  • Prometheus, Grafana는 로그/데이터 저장이 필수인데, 컨테이너를 재시작해도 데이터가 유지가능하다.

  • 호스트가 설정 파일을 수정하면 컨테이너가 바로 반영하다 (🔥hot reload)

    7. networks

    : 컨테이너가 속할 네트워크이다. 기본적으로 컨테이너들끼리는 같은 네트워크에 속해있어야 통신이 가능하다.


참고

https://byungwoo.oopy.io/2758a690-6ec7-42d0-ae41-5ebc75f4e57a

profile
어제보다 1cm라도 나아가는 사람 (위로)

0개의 댓글