DevOps

Docker MySQL + Spring boot 연동

감자b 2024. 12. 30. 00:17
  1. MySQL 이미지를 설치
docker pull mysql
  1. 설치가 잘 되었는지 확인
docker images
  1. 다운받은 이미지로 MySQL 컨테이너 실행
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=<password> -d -p 3306:3306 mysql:latest
  • docker run: Docker에서 새로운 컨테이너를 생성하고 실행하는 명령어
  • --name mysql-container: 생성할 컨테이너의 이름을 mysql-container로 지정
  • -e MYSQL_ROOT_PASSWORD=: 환경 변수를 설정.
    • 여기서 MYSQL_ROOT_PASSWORD는 MySQL의 루트 사용자 비밀번호를 설정
  • -d: 컨테이너를 백그라운드에서 실행하도록 지정. 즉, 터미널을 차지하지 않고 실행
  • -p 3306:3306: 호스트의 3306 포트를 컨테이너의 3306 포트에 매핑
  • mysql:latest: 컨테이너에 사용할 Docker. 이미지 여기서는 MySQL의 최신 버전을 사용하겠다는 의미
  1. 생성된 컨테이너 확인
docker ps -a
  1. MySQL 컨테이너 접속 (CONTAINER ID는 4번 명령어를 통해 확인 가능)
docker exec -it <CONTAINER ID> mysql -u root -p 
  1. Database 생성
create database <DBName>

Spring boot 설정

의존성

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.mysql:mysql-connector-j'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: ${local.mysql.url}
    username: ${local.mysql.username}
    password: ${local.mysql.password}
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        format_sql: true
    open-in-view: false

환경 변수로 url, username, password를 주입받는다.

url : jdbc:mysql://localhost:3306/?serverTimezone=UTC

username : root

password : 위에서 지정한 패스워드


설정 중 발생한 에러

Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)']
Database driver: undefined/unknown
Database version: 8.0.40
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
...

3.4.x 버전을 사용하니 해당 에러가 발생하였다.

버전을 3.3.7로 낮추고 나니 해결되었다.

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.3.7'
    id 'io.spring.dependency-management' version '1.1.7'
}