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] # 도커 컨테이너 로그 확인

 

docker ps