본문 바로가기
DevOps/Docker

[Docker] 도커로 2개의 DB를 동시에 실행하는 방법 (Feat. 인증서버, 자원서버 DB 분리)

by ryuneng 2025. 1. 25.
반응형

✅ 1. .env > DB_NAME 다르게 수정

1) 인증서버

DB_HOST=localhost
DB_PORT=3306
DB_NAME=[인증서버 DB 이름] // 상이
DB_USER=[사용자명]
DB_PASSWORD=[비번입력]

2) 자원서버

DB_HOST=localhost
DB_PORT=3306
DB_PORT_RESOURCE=3307    // 추가
DB_NAME=[자원서버 DB 이름] // 상이
DB_USER=[사용자명]
DB_PASSWORD=[비번입력]


✅ 2. docker-compose.yml > ports 수정 후 각각 실행

1) 인증서버 3306:3306 형식
2) 자원서버 3307:3306 형식

  • docker-compose.yml 코드 (해당 파일 또한 인증서버, 자원서버에 각각 존재)
version: "3.9"

services:
  mariadb:
    image: mariadb:latest
    container_name: gold-auth-mariadb
    ports:
      - ${DB_PORT}:${DB_PORT}          # 인증서버 ver. 
      - ${DB_PORT_RESOURCE}:${DB_PORT} # 자원서버 ver. 
    restart: always
    environment:
      MARIADB_DATABASE: ${DB_NAME}
      MARIADB_ROOT_PASSWORD: ${DB_PASSWORD}
    volumes:
      - mariadb-vl:/var/lib/mariadb

volumes:
  mariadb-vl:
    driver: local



✅ 3. 각각 실행 잘 됨!!



✅ 4. DB 스키마 생성 시 Database 이름, Port 번호 다르게 입력

1) 인증서버 - Port 3306

2) 자원서버 - Port 3307



✅ 5. application.yml 설정하면 서버 실행까지 정상적으로 완료~!

1) 인증서버

server:
  port: 8888 # 상이

spring:
  application:
    name: auth-server

  # .env import
  config:
    import: optional:file:.env[.properties]

  datasource:
    url: jdbc:mariadb://${DB_HOST}:${DB_PORT}/${DB_NAME} ### 상이
    username: ${DB_USER}
    password: ${DB_PASSWORD}
    driver-class-name: org.mariadb.jdbc.Driver

  jpa:
    open-in-view: true
    hibernate:
      ddl-auto: create # 서버 실행 시 DB의 모든 테이블 삭제 후 재생성
      naming:
        use-new-id-generator-mappings: false
    show-sql: true
    properties:
      hibernate:
        id:
          new_generator_mappings: true
        format_sql: true
      dialect: org.hibernate.dialect.MariaDBDialect
    defer-datasource-initialization: true # (2.5~) Hibernate 초기화 이후 data.sql 실행

2) 자원서버

server:
  port: 9999 # 상이

spring:
  application:
    name: resource-server

  # .env import
  config:
    import: optional:file:.env[.properties]

  datasource:
    url: jdbc:mariadb://${DB_HOST}:${DB_PORT_RESOURCE}:${DB_PORT}/${DB_NAME} ### 상이
    username: ${DB_USER}
    password: ${DB_PASSWORD}
    driver-class-name: org.mariadb.jdbc.Driver

  jpa:
    open-in-view: true
    hibernate:
      ddl-auto: create # 서버 실행 시 DB의 모든 테이블 삭제 후 재생성
      naming:
        use-new-id-generator-mappings: false
    show-sql: true
    properties:
      hibernate:
        id:
          new_generator_mappings: true
        format_sql: true
      dialect: org.hibernate.dialect.MariaDBDialect
    defer-datasource-initialization: true # (2.5~) Hibernate 초기화 이후 data.sql 실행

 


< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >

🔗 velog 버전 보기 : https://velog.io/@ryuneng2/Docker-도커로-2개의-DB를-동시에-실행하는-방법