[도커(docker)] Docker Compose로 Node.js Express 서버와 Redis 연동하기

📢  작성순서 

📌 Express 서버 구성

📌 Express 서버용 Dockerfile 만들기

📌 Docker Compose 설정
📌 Docker Compose 실행

 

💻 참고 페이지 

📝 [도커(docker)] Dockerfile를 이용하여 nodejs & express 서버 설치 및 개발 환경 구성하기

 

[도커(docker)] Dockerfile를 이용하여 nodejs & express 서버 설치 및 개발 환경 구성하기

[도커(docker)] Dockerfile를 이용하여 nodejs & express 서버 설치 및 개발 환경 구성하기  📢  작성순서 📌 Node.js Express 서버 코드 작성📌 Docker 설정 파일 작성📌 Docker 컨테이너 실행 📌  Node.j

happyldh.tistory.com


📌  프로젝트 디렉터리 구조

📝 프로젝트 폴더 아래처럼 구성하겠습니다.

express-redis-app/
│── docker-compose.yml    # Docker Compose 설정 파일
│── app/                  # Node.js Express 서버 코드
│   ├── Dockerfile        # dockerfile
│   ├── server.js         # Express 서버 코드
│   ├── package.json      # Node.js 패키지 설정 파일

📌  Express 서버 구성 

📝 package.json 파일 생성 

/app 폴더에서 아래의 명령어를 이용해서 package.json 파일을 생성한다.

npm init -y

생성된 파일 내용을 아래와 같이 변경한다.

{
  "name": "express-redis-app",  // 프로젝트 이름
  "version": "1.0.0",  // 프로젝트 버전
  "main": "index.js",  // 기본 실행 파일 (사용되지 않음, "start" 스크립트에서 server.js 사용)
  "scripts": {
    "start": "node server.js",  // 서버 실행 명령어 (server.js 파일을 실행)
    "test": "echo \"Error: no test specified\" && exit 1"  // 테스트 스크립트 (현재 테스트 없음)
  },
  "keywords": [],  // 프로젝트 관련 키워드 (비어 있음)
  "author": "",  // 작성자 정보 (비어 있음)
  "license": "ISC",  // 오픈소스 라이선스 (ISC 라이선스 적용)
  "description": "",  // 프로젝트 설명 (비어 있음)
  "dependencies": {
    "express": "^4.21.2",  // Express.js 최신 버전 (4.21.2 이상)
    "redis": "^4.7.0"  // Redis 클라이언트 최신 버전 (4.7.0 이상)
  }  
}

🙌 local에서 구현하는 방법은 상단에 Dockerfile를 이용하여 nodejs & express 서버 설치 및 개발 환경 구성하기 링크를 이용하여 확인하세요

📝 server.js 파일 생성 

/app 폴더에 editor(vscode등)을 이용하여 Redis 연동코드를 server.js파일에 작성한다. 

const express = require('express'); // Express.js 프레임워크 모듈 불러오기
const redis = require('redis'); // Redis 클라이언트 모듈 불러오기

const app = express();
const PORT = 3000; // 서버가 실행될 포트 번호

// Redis 클라이언트 설정
const redisClient  = redis.createClient({
    socket: {
        host: 'redis', // Docker Compose에서 정의한 Redis 컨테이너의 이름
        port: 6379 // Redis 기본 포트
    }
});

// Redis 서버에 연결
redisClient.connect()
    .then(() => console.log('Redis connected')) // 연결 성공 시 메시지 출력
    .catch((err) => console.error("❌ Redis 연결 실패:", err)); // 연결 실패 시 오류 출력

// 기본 라우트 설정
app.get('/', async (req, res) => {     
    let count = await redisClient.get('count'); // Redis에서 'count' 키의 값을 가져옴
    if (!count) {
        count = 0; // 값이 없으면 기본값 0으로 설정
    } 

    count = parseInt(count) + 1; // 방문자 수 증가
    await redisClient.set('count', count); // 증가된 값을 Redis에 저장
    res.send(`Hello World! ${count}`); // 응답으로 방문 횟수 출력
});

// 서버 실행
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`); // 서버 실행 메시지 출력
});

 

📌  Express 서버용 Dockerfile 만들기

📝 /app 폴더에 Dockerfile를 생성한다. 

# Node.js 18 버전의 공식 이미지를 기반으로 함
FROM node:18

# 작업 디렉터리 설정
WORKDIR /usr/src/app

# package.json과 package-lock.json을 복사
COPY package*.json .

# 의존성 설치
RUN npm install 

# 모든 파일을 컨테이너로 복사
COPY . .

# 애플리케이션 실행
CMD ["npm", "start"]

 

📌  Docker Compose 설정

📝 Root 폴더에 docker-compose.yml을 작성해서 Express와 Redis 서버를 하나의 네트워크에서 실행하자

version: '3'  # Docker Compose 파일의 버전 지정

services:
  redis:
    image: "redis:latest"  # 최신 Redis 이미지를 사용하여 컨테이너 실행
    container_name: "redis-server"  # 컨테이너의 이름을 "redis-server"로 지정
    ports:
      - "6379:6379"  # 호스트의 6379 포트를 컨테이너의 6379 포트에 매핑 (Redis 기본 포트)

  app:
    build: ./app  # ./app 디렉터리에 있는 Dockerfile을 기반으로 애플리케이션 빌드
    container_name: "express-server"  # 컨테이너의 이름을 "express-server"로 지정
    ports:
      - "3000:3000"  # 호스트의 3000 포트를 컨테이너의 3000 포트에 매핑
    depends_on:
      - redis  # "redis" 서비스가 먼저 실행된 후 "app" 서비스가 실행됨
    volumes:
      - ./app:/usr/src/app  # 로컬의 "./app" 디렉터리를 컨테이너의 "/usr/src/app"에 매핑
      - /usr/src/app/node_modules  # "node_modules" 디렉터리는 호스트와 공유하지 않음 (컨테이너 내부에서만 유지)
    environment:
      - REDIS_HOST=redis  # Redis 서버의 호스트명을 "redis"로 설정 (Docker Compose 내 서비스 이름 사용 가능)
      - REDIS_PORT=6379  # Redis 포트를 6379로 설정

 

📌  Docker Compose 실행

📝 docker-compose up 명령을 실행해서 Redis와 Express 서버를 함께 실행하자.

docker-compose up --build

👉 터미널 출력결과

👉 docker images 화면

👉 docker containers 화면

👉 브라우저 접속 화면

👉 새로고침을 할때마다 숫자가 1씩 증가합니다.

🚀 지금까지 Docker Compose를 이용하여 Node.js Express 서버와 Redis서버 두개의 docker를 연동하는 방법을 알아보았습니다 

 

 



 

 

 

+ Recent posts