28강. Docker를 이용한 Node.js 프로젝트 컨테이너화
이번 강의에서는 Docker를 사용하여 Node.js + MySQL 프로젝트를 동일한 환경에서 실행하는 방법을 배웁니다.
목표: Docker와 Docker Compose를 이용해 개발 환경을 구성하고, 어디서나 동일한 프로젝트를 실행할 수 있습니다.
1. Docker란?
Docker는 애플리케이션과 실행 환경을 컨테이너(Container)로 묶어 실행하는 기술입니다.
장점
개발 환경 통일
배포 간소화
실행 속도 빠름
운영체제 차이 최소화
2. Docker 구조
개발자
↓
Docker Image
↓
Docker Container
↓
Node.js
↓
MySQL
3. Docker 설치
Windows
Docker Desktop 설치
Linux
sudo apt install docker.io
확인
docker --version
4. 프로젝트 구조
project
│
├── backend
│ server.js
│ package.json
│
├── frontend
│
├── Dockerfile
│
└── docker-compose.yml
5. Dockerfile 만들기
FROM node:22
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm","start"]
6. Docker 이미지 만들기
docker build -t node-app .
확인
docker images
7. 컨테이너 실행
docker run -p 3000:3000 node-app
브라우저
http://localhost:3000
8. Docker Compose
docker-compose.yml
version: "3.9"
services:
node:
build: .
ports:
- "3000:3000"
depends_on:
- mysql
mysql:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: node_db
ports:
- "3306:3306"
9. 실행
docker compose up
백그라운드 실행
docker compose up -d
10. 종료
docker compose down
11. 환경 변수
.env
DB_HOST=mysql
DB_USER=root
DB_PASSWORD=1234
DB_NAME=node_db
PORT=3000
Node.js
require("dotenv").config();
12. MySQL 연결
const mysql = require("mysql2");
const db = mysql.createConnection({
host:process.env.DB_HOST,
user:process.env.DB_USER,
password:process.env.DB_PASSWORD,
database:process.env.DB_NAME
});
Docker에서는 DB_HOST=mysql처럼 서비스 이름을 사용합니다.
13. 데이터 유지
볼륨(Volume)을 사용합니다.
volumes:
mysql-data:
MySQL
volumes:
- mysql-data:/var/lib/mysql
데이터가 컨테이너 삭제 후에도 유지됩니다.
14. React + Node + MySQL
Docker
│
├── React
├── Node
└── MySQL
각 서비스를 하나의 Compose 파일에서 관리할 수 있습니다.
15. 로그 확인
docker logs 컨테이너명
실시간 로그
docker logs -f 컨테이너명
16. 실행 중인 컨테이너
docker ps
전체 확인
docker ps -a
17. 컨테이너 접속
docker exec -it 컨테이너명 bash
Node 내부에서
node -v
확인 가능합니다.
18. 이미지 삭제
docker rmi 이미지명
컨테이너 삭제
docker rm 컨테이너명
19. 실무 프로젝트 구조
project
│
├── frontend
│ Dockerfile
│
├── backend
│ Dockerfile
│
├── nginx
│ Dockerfile
│
└── docker-compose.yml
React, Node.js, MySQL, Nginx를 각각 독립된 컨테이너로 구성하는 것이 일반적입니다.
20. 이번 강의 핵심 정리
명령어 설명
docker build 이미지 생성
docker run 컨테이너 실행
docker ps 실행 중인 컨테이너 확인
docker logs 로그 확인
docker exec 컨테이너 접속
docker compose up 여러 서비스 실행
docker compose down 서비스 종료
실무 팁
Docker를 사용할 때는 애플리케이션과 데이터베이스를 분리하는 것이 중요합니다.
권장 구조
React Container
│
▼
Node.js Container
│
▼
MySQL Container
또한 MySQL은 반드시 Volume을 사용해 데이터를 영구 보관하고, .env 파일을 통해 환경 변수를 관리하는 것이 일반적입니다.
실습 미션
다음 환경을 Docker로 구성해 보세요.
✅ Node.js 컨테이너
✅ MySQL 컨테이너
✅ Dockerfile 작성
✅ Docker Compose 작성
✅ .env 적용
✅ MySQL Volume 설정
✅ Express 서버 실행 확인
이번 강의에서는 Docker를 사용하여 Node.js + MySQL 프로젝트를 동일한 환경에서 실행하는 방법을 배웁니다.
목표: Docker와 Docker Compose를 이용해 개발 환경을 구성하고, 어디서나 동일한 프로젝트를 실행할 수 있습니다.
1. Docker란?
Docker는 애플리케이션과 실행 환경을 컨테이너(Container)로 묶어 실행하는 기술입니다.
장점
개발 환경 통일
배포 간소화
실행 속도 빠름
운영체제 차이 최소화
2. Docker 구조
개발자
↓
Docker Image
↓
Docker Container
↓
Node.js
↓
MySQL
3. Docker 설치
Windows
Docker Desktop 설치
Linux
sudo apt install docker.io
확인
docker --version
4. 프로젝트 구조
project
│
├── backend
│ server.js
│ package.json
│
├── frontend
│
├── Dockerfile
│
└── docker-compose.yml
5. Dockerfile 만들기
FROM node:22
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm","start"]
6. Docker 이미지 만들기
docker build -t node-app .
확인
docker images
7. 컨테이너 실행
docker run -p 3000:3000 node-app
브라우저
http://localhost:3000
8. Docker Compose
docker-compose.yml
version: "3.9"
services:
node:
build: .
ports:
- "3000:3000"
depends_on:
- mysql
mysql:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: node_db
ports:
- "3306:3306"
9. 실행
docker compose up
백그라운드 실행
docker compose up -d
10. 종료
docker compose down
11. 환경 변수
.env
DB_HOST=mysql
DB_USER=root
DB_PASSWORD=1234
DB_NAME=node_db
PORT=3000
Node.js
require("dotenv").config();
12. MySQL 연결
const mysql = require("mysql2");
const db = mysql.createConnection({
host:process.env.DB_HOST,
user:process.env.DB_USER,
password:process.env.DB_PASSWORD,
database:process.env.DB_NAME
});
Docker에서는 DB_HOST=mysql처럼 서비스 이름을 사용합니다.
13. 데이터 유지
볼륨(Volume)을 사용합니다.
volumes:
mysql-data:
MySQL
volumes:
- mysql-data:/var/lib/mysql
데이터가 컨테이너 삭제 후에도 유지됩니다.
14. React + Node + MySQL
Docker
│
├── React
├── Node
└── MySQL
각 서비스를 하나의 Compose 파일에서 관리할 수 있습니다.
15. 로그 확인
docker logs 컨테이너명
실시간 로그
docker logs -f 컨테이너명
16. 실행 중인 컨테이너
docker ps
전체 확인
docker ps -a
17. 컨테이너 접속
docker exec -it 컨테이너명 bash
Node 내부에서
node -v
확인 가능합니다.
18. 이미지 삭제
docker rmi 이미지명
컨테이너 삭제
docker rm 컨테이너명
19. 실무 프로젝트 구조
project
│
├── frontend
│ Dockerfile
│
├── backend
│ Dockerfile
│
├── nginx
│ Dockerfile
│
└── docker-compose.yml
React, Node.js, MySQL, Nginx를 각각 독립된 컨테이너로 구성하는 것이 일반적입니다.
20. 이번 강의 핵심 정리
명령어 설명
docker build 이미지 생성
docker run 컨테이너 실행
docker ps 실행 중인 컨테이너 확인
docker logs 로그 확인
docker exec 컨테이너 접속
docker compose up 여러 서비스 실행
docker compose down 서비스 종료
실무 팁
Docker를 사용할 때는 애플리케이션과 데이터베이스를 분리하는 것이 중요합니다.
권장 구조
React Container
│
▼
Node.js Container
│
▼
MySQL Container
또한 MySQL은 반드시 Volume을 사용해 데이터를 영구 보관하고, .env 파일을 통해 환경 변수를 관리하는 것이 일반적입니다.
실습 미션
다음 환경을 Docker로 구성해 보세요.
✅ Node.js 컨테이너
✅ MySQL 컨테이너
✅ Dockerfile 작성
✅ Docker Compose 작성
✅ .env 적용
✅ MySQL Volume 설정
✅ Express 서버 실행 확인
#28강. Docker를 이용한 Node.js 프로젝트 컨테이너화