[도커(docker)] Docker Compose로 Node.js Express 서버와 Redis 연동하기
📢 작성순서
📌 Express 서버 구성
📌 Express 서버용 Dockerfile 만들기
📌 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를 연동하는 방법을 알아보았습니다
'Server > Docker' 카테고리의 다른 글
[도커(docker)] Dockerfile를 이용하여 react app 서버 설치 및 개발 환경 구성하기 (0) | 2025.02.21 |
---|---|
[도커(docker)] docker build 명령어 사용법 - Dockerfile (0) | 2025.02.21 |
[도커(docker)] Dockerfile를 이용하여 nodejs & express 서버 설치 및 개발 환경 구성하기 (0) | 2025.02.12 |
[도커(docker)] 도커에 MariaDB 설치 및 실행하기 (3) | 2025.02.05 |
[도커(docker)] 도커로 RabbitMQ 설치 및 실행하기 (2) | 2025.02.03 |