본문 바로가기
Docker

Docker spring boot mysql 연동 자세히 설명

by 옹알이옹 2023. 8. 28.
목차

1. Docker에서 spring boot, mysql 연동 방법

1.1 docker network 생성

2. mysql 이미지 컨테이너 생성

2-1. mysql 도커 이미지 다운로드

2-2. mysql docker 컨테이너 생성

2-3. mysql DB 생성

3. Spring boot 컨테이너 생성

3-1. application.yaml 파일 수정 *

3-2. docker file 생성

3-3. spring boot 이미지 생성 후 실행


 1. Docker에서 spring boot, mysql 연동 방법

도커에서 spring boot와 mysql을 연동하여 배포하려면 spring boot 컨테이너와 mysql 컨테이너가 각각 필요하다.

이후 두 컨테이너를 연동하는 방법으로는 브릿지 네트워크 사용, docker compose 사용, host 네트워크 공유 등이 있지만

이번 예제에서는 브릿지 네트워크 (bridge network)를 생성하여 사용하는 방법을 다룬다.

*도커의 기본 네트워크 모드가 브릿지 네트워크이다.

 

방법은 간단하다. Docker의 네트워크를 생성한 뒤 spring boot 이미지와 mysql 이미지를 해당 네트워크를 통해
실행하여 컨테이너를 생성하면 된다.

 

1.1 docker network 생성

먼저 docker network를 생성한다. 방법은 다음과 같다.

  1. 터미널 창 이동 => docker network create <네트워크 이름> 입력 (필자는 docker-network로 명칭을 줌)
  2. docker network ls 명령어 입력 후 docker 네트워크 목록 확인

도커 네트워크 생성 확인
도커 네트워크 목록

이렇게 네트워크를 생성 한 뒤 mysql, spring boot 컨테이너를 해당 네트워크에 묶어주면 된다.

그전에 먼저 mysql 이미지와 spring boot 이미지를 생성한다.


 2. mysql 이미지 컨테이너 생성

컨테이너를 생성하기 위해서는 도커 파일과 도커 이미지를 생성하는 과정이 필요하다.
하지만 다른 방법으로 docker hub에서 원하는 DB의 이미지를 다운로드 받아서 컨테이너를 생성할 수 있다.

docker hub에서 다운로드하는 방법은 다음과 같다.

 

2-1. mysql 도커 이미지 다운로드

터미널 창 이동 => docker pull mysql:8.0 입력

 

해당 명령어를 입력하면 다운로드하는 과정이 터미널에 표시되며 완료 시 docker images 명령어를 통해 확인 가능

mysql이미지
mysql이미지

 

2-2.  mysql docker 컨테이너 생성

다운로드한 mysql docker 이미지를 생성한 docker 네트워크에 귀속시키며 생성한다. 명령문은 다음과 같다.

docker run -d --name mysql-container --network docker-network  -e MYSQL_ROOT_PASSWORD=1234  mysql:latest 

명령문이 긴데 해석하면 이렇다.

mysql-container라는 이름으로 network는 아까 생성한 docker-network를 사용하며, mysql 비밀번호를 1234로 설정한다.

 

해당 명령어를 치면 터미널에 다운로드 진행 상황이 실시간으로 보이며, docker ps 명령어를 통해 아래와 같이 확인됨 

생성된 mysql-container

이후 실제 해당 컨테이너가 좀 전에 생성한 docker-network에 속하는지 확인하는 방법은 터미널에 해당 명령어를 입력한다.

docker network inspect docker-network 입력, 입력 후 아래와 같은 내용이 출력되면 성공한 것.

docker network

 

2-3.  mysql DB 생성

url: jdbc:mysql://localhost:3306/helloDev

나의 spring boot  project에서 사용하는 DB의 이름은 helloDev이다. 하지만 현재 도커의 mysql에는 해당 DB가 없어 생성해야 함.

 

터미널을 통해 컨테이너의 mysql에 접속할 것이고, 아래의 명령어를 순서대로 입력한다.

* docker는 Host OS와 커널을 공유하므로 로컬 PC(Host OS)에서도 접근 가능

docker exec -it <mysql-container이름> mysql -u root -p 

#아래의 메시지가 나오면 아까 생성할 때 입력한 비밀번호 입력
Enter password:
# 비밀번호 입력 후 mysql> 글자가 보이며 접속이 된것이 확인됨.
mysql> create database helloDev;
Query OK, 1 row affected (0.12 sec) 메시지가 나오면 끝.

 

 3. Spring boot 컨테이너 생성

 

3-1. application.yaml 파일 수정 *

위에서 만든 mysql-container와 연동하기 위해 yaml 파일의 해당 부분을 수정한다.

server:
  port: 8088
spring:

  profiles:
    active: test

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://localhost:3306/helloDev
    url: jdbc:mysql://mysql-container:3306/helloDev

기존의 localhost 대신 위에서 생성한 mysql-container의 이름을 넣어주어야 한다.

* 이름 대신에 mysql-container의 IP 주소를 입력해도 되지만 Docker의 DNS가 동적으로 매핑해주니 이름으로 사용하자.

 

3-2. docker file 생성

FROM openjdk:11-jre-slim

WORKDIR /app

# 빌드된 Spring Boot JAR 파일을 복사
COPY build/libs/demo-0.0.1-SNAPSHOT.jar hellodev.jar

# JAR 파일 실행
CMD ["java", "-jar", "hellodev.jar"]

 

3-3. spring boot 이미지 생성 후 실행

  1. jar 파일 생성
  2. docker build -t hellodev-image . 해당 명령어를 입력하여 이미지 생성
  3. 위와 동일하게 생성한 네트워크를 옵션으로 주어 이미지 실행.
    docker run -d --name hellodev-container --network docker-network -p 8088:8088  hellodev-image
  4. docker network inspect docker-network 명렁어를 통해 spring boot, mysql 컨테이너가 생성한 네트워크에 속하는지 확인.

도커 네트워크 목록

 

* 최종 확인

1. docker db에 접속하여 테스트 데이터를 넣고 미리 만들어 놓은 API를 호출한다.

2. localhost:8088/board/1 을 브라우저에 입력했을 때 아래와 같이 DB에서 데이터가 조회된다.

API호출결과

3. 생성한 도커 네트워크(브릿지)는 컨테이너를 실행하는 Host의 IP를 통해 포워딩이 가능하다.

* 단 컨테이너를 생성할 때 위에서 처럼 8088:8088을 입력하여 포워딩을 해주어야 함.
따라서 localhost:8088을 통하여 도커 컨테이너의 API를 호출할 수 있는 것이다.

반응형

'Docker' 카테고리의 다른 글

Spring boot + Docker linux에 배포  (0) 2023.08.31
Docker compose Spring boot ,mysql 연동 방법  (0) 2023.08.29
Spring boot 도커 파일 생성 및 배포  (0) 2023.08.28