[TIL #34] Docker 및 Docker Compose 올려보기

2024. 12. 3. 21:23·Camp/T.I.L.

도커를 올려보기로 했다.

이미 라즈베리 파이 서버에 인프라가 다 준비돼 있지만,

내가 만져보면서 이해해보고 싶었던 것이기도 했고, 아마존 ECS에 올려보기 위함이기도 하다.

 

일단 현재 서버는 다음과 같은 상태다.

  1. Node.js 서버
  2. MySQL
  3. Redis
  4. Grafana

그럼 각각의 것들을 다 컨테이너로 만들어 ``Compose``로 묶어서 빌드 후 배포할 수 있어야 하겠다.

 

먼저 노드 서버를 위한 ``Dockerfile``을 다음과 같이 만들었다.

# Node.js 베이스 이미지 사용
FROM node:20-alpine

# 작업 디렉토리 설정
WORKDIR "작업 디렉토리"

# 패키지 파일 복사 및 의존성 설치
COPY package*.json ./
RUN npm install

# 소스 코드 복사
COPY . .

# 포트 노출
EXPOSE 5555

# 애플리케이션 실행
CMD ["npx", "pm2-runtime", "start", "ecosystem.config.cjs"]

별 다른 특별한 일은 하지 않는다.

다르다면 ``pm2``를 위한 설정이 있다는 것.

 

그리고 DB 등의 나머지 것들에 대한 설정은 ``docker-compose.yml``에서 이루어진다.

services:
  nodejs:
    build: .
    ports:
      - "5555:5555"
    env_file:
      - .env
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy
      mysqld_exporter:
        condition: service_healthy
      redis_exporter:
        condition: service_healthy
      node_exporter:
        condition: service_healthy
    restart: on-failure
    networks:
      - app-network
      
// ...

이런 식으로 필요한 모든 서비스를 컴포즈 파일에 정의했다.

각 DB와 익스포터들에 대해 헬스 체크도 수행하게 했고,

``depends_on``이기 때문에 저것들이 다 올라와야 노드 서버가 올라올 수 있다.

 

하다 보니 익스포터마저 별개 컨테이너로 빠지게 됐는데, 이게 괜찮은지에 대해선 생각을 좀 해봐야 할 것 같다.

컨테이너가 8개가 돼버렸기 때문...

 

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['prometheus:9090']

  - job_name: 'mysql'
    static_configs:
      - targets: ['mysqld_exporter:9104']

  - job_name: 'redis'
    static_configs:
      - targets: ['redis_exporter:9121']

  - job_name: 'node'
    static_configs:
      - targets: ['node_exporter:9100']

물론 프로메테우스 설정도 잊지 않았다.

 

컴포즈로 빌드 후 컨테이너가 올라오는 것을 보자.

컨테이너들도 잘 올라오고 서버가 정상적으로 동작하는 것도 확인할 수 있었다.

 

물론 그라파나와 프로메테우스도 잘 올라온다.

 

이전엔 도커와 도커 컴포즈를 남이 말아놓은 걸 "사용"만 해봤었다.

내가 처음부터 구성해서 올리는 건 처음이었는데, 꽤 좋은 경험이었다.

처음엔 어떻게 해야 하나 싶었지만, 계속 보다 보니 보이는 게 생기는 것 같았다.

혹시 모를 에러가 있을 수 있으니 시간을 두고 지켜보며 개선할 수 있을 것이다.

'Camp > T.I.L.' 카테고리의 다른 글

[TIL #35] 데드락에 죽다 살다  (0) 2024.12.15
[TIL #33] 마법의 엘리베이터  (0) 2024.11.20
[TIL #32] 자바스크립트와 싱글톤  (0) 2024.11.18
[TIL #31] 상태 업데이트의 벽  (0) 2024.10.31
[TIL #30] 모의 면접을 준비하며  (0) 2024.10.30
'Camp/T.I.L.' 카테고리의 다른 글
  • [TIL #35] 데드락에 죽다 살다
  • [TIL #33] 마법의 엘리베이터
  • [TIL #32] 자바스크립트와 싱글톤
  • [TIL #31] 상태 업데이트의 벽
BVM
BVM
  • BVM
    E:\
    BVM
  • 전체
    오늘
    어제
    • 분류 전체보기 (168)
      • Thoughts (14)
      • Study (69)
        • Japanese (3)
        • C++ & C# (46)
        • Javascript (3)
        • Python (14)
        • Others (3)
      • Play (1)
        • Battlefield (1)
      • Others (11)
      • Camp (73)
        • T.I.L. (57)
        • Temp (1)
        • Standard (10)
        • Challenge (3)
        • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 본 블로그 개설의 목적
  • 인기 글

  • 태그

    docker
    c#
    IOCP
    네트워크 프로그래밍
    db
    포인터
    Server
    스타필드
    Python
    Asio
    JS
    discord py
    서버
    bot
    베데스다
    Dalamud
    암호화
    7계층
    네트워크
    boost
    Selenium
    C++
    discord
    FF14
    cloudtype
    클라우드
    로깅
    OSI
    프로그래머스
    Network
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
BVM
[TIL #34] Docker 및 Docker Compose 올려보기
상단으로

티스토리툴바