Client/Next.js
NestJS) Docker - MySQL 연결 환경설정
Juzdalua
2025. 2. 11. 11:28
도커를 사용할 때 DB 호스트는 컨테이너 이름으로 한다.
// .env
# DB_HOST=localhost # local
DB_HOST=my-mysql # Docker
DB_PORT=3306
DB_USER=root
DB_PASS=[MY_PASS]
DB_DATABASE=[MY_DB]
docker-compose.yml 파일과 함께 실행한다면 Dockerfile을 직접 실행하지 않는다.
// Dockerfile
FROM node:22
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
CMD ["npm","run","dev"]
EXPOSE 8000
ROOT 사용자로 DB 연결
- 일반 사용자로 연결한다면 services-db-environment 키값이 바뀌어야한다.
- ${변수명}을 사용한다면 .env 파일과 매칭 가능하다.
// docker-compose.yml
version: '3.8'
services:
db:
image: mysql:8.0
container_name: my-mysql # DB 컨테이너 이름. HOST와 매칭된다.
restart: always
environment: # root 사용자의 키밸류 값
MYSQL_ROOT_PASSWORD: ${DB_PASS}
MYSQL_DATABASE: ${DB_DATABASE}
ports: # 3306 포트를 3307 포트로 매핑한다.
- "3307:3306"
volumes:
- mysql_data:/var/lib/mysql
app:
build: .
container_name: my-wedding-server # 메인 컨테이너 이름
depends_on:
- db
environment: # .env 파일의 키값과 맞춰야한다.
DB_HOST: ${DB_HOST}
DB_PORT: ${DB_PORT}
DB_USER: ${DB_USER}
DB_PASS: ${DB_PASS}
DB_DATABASE: ${DB_DATABASE}
ports:
- "8000:8000"
volumes:
mysql_data:
docker-compose.yml 파일을 같이 실행한다면, 아래 명령어로 실행한다.
docker-compose down # 도커 컨테이너 삭제
docker-compose up -d --build # 도커 컨테이너 백그라운드 재시작
docker exec -it my-mysql mysql -u root -p # 도커 DB 연결 테스트
docker ps # 도커 컨테이너 목록 확인
docker logs [MY_CONTAINER_NAME] # 도커 컨테이너 로그 확인