GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the Docker

[ Docker ] Spring 프로젝트 컨테이너+ MySQL 컨테이너 연동하기

Backcoder 2022. 12. 28. 17:20

Docker 에서 각 컨테이너들은 독립적인 상태로 존재합니다. 

 

MySQL을 이미지로 가져오고 

docker pull mysql

그냥 Mysql 컨테이너를 생성하면  

docker run --name dbmysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=0000 -e MYSQL_DATABASE=ourproject -e MYSQL_USER=userid -e MYSQL_PASSWORD=0000 -d mysql

 

docker ps ( 실행중인 컨테이너 확인 ) 

mysql 컨테이너가 생성되어 있습니다.

 

컨테이너에 접속해서 

docker exec -it 컨테이너이름 /bin/bash

mysql -u root - p 로 접속, mysql을 사용할 수 있습니다. 

 

Spring 프로젝트 컨테이너도, DB 가 사용되지 않았다면 그냥 독립적으로는 실행시킬 수 있습니다. 

 

즉, 각각의 Container 들은 독립적으로 하나하나씩은 잘 돌아갑니다. 

하지만 두 Container 사이에 연동이 필요할 경우, 

즉, Spring 프로젝트에서 MySQL DB를 연동해서 사용하고 있을 경우 

 

[ Spring 프로젝트 컨테이너 ]  <======>  [ Mysql 컨테이너 ]

 

이 둘 사이를 연결시켜줄 연결고리가 필요합니다. 

 

크게 두 가지 방법이 있는 것 같습니다. 

 

(1) docker-compose 사용 

(2) network 사용 

 

docker-compose 가 여러가지 컨테이너를 연결하고 설정하는데 훨씬 강점이 있어 많이 사용되고 있습니다. 

이 글에서는 간단히 network 를 사용해 spring 프로젝트 컨테이너와 mysql 컨테이너만을 연결하는 방법을 정리했습니다.

 

결론적으로는 network 를 하나 생성해두고,

연결시키고자 하는 각 컨테이너에서 이미지로 컨테이너를 생성할 때

네트워크 정보를 포함해서 컨테이너를 생성해줍니다. 

 

 

1. network 생성 

docker network create springboot-mysql-network

네트워크 확인 

docker network ls 

 

2. 네트워크 정보 포함 mysql 컨테이너 생성 

docker run --name dbmysql -p 3306:3306 --network springboot-mysql-network -e MYSQL_ROOT_PASSWORD=0000 -e MYSQL_DATABASE=ourdb -e MYSQL_USER=userid -e MYSQL_PASSWORD=0000 -d mysql

위와 같이, 

--network 생성해둔네트워크이름

정보를 추가 

-d  ( 백그라운드 실행 ) 추가

 

하여 컨테이너를 생성해줍니다. 

( 생성해둔 네트워크와 연결된 상태의 /  백그라운드 실행되는 mysql 컨테이너 ) 

 

3. 네트워크 정보 포함 spring 프로젝트 컨테이너 생성 

docker run -p 8080:8080 --name springboot-mysql --network springboot-mysql-network -d 프로젝트이미지ID

 마찬가지로, 

--network 생성해둔네트워크이름 

정보를 추가

-d ( 백그라운드 실행 ) 추가 

컨테이너를 생성해 줍니다. 

( 생성해둔 네트워크와 연결된 상태의 / 백그라운드 실행되는 spring 프로젝트 컨테이너 ) 

 

 

이렇게 하면 

 

Spring 프로젝트 컨테이너  ======= 생성해둔 네트워크 ======= Mysql 컨테이너 

 

생성해둔 네트워크를 연결고리로, 두 컨테이너를 연결할 수 있고 

Spring 프로젝트에서 Mysql DB 를 연동하여 사용할 수 있게 됩니다. 

 

Docker 는 간편하고 편리한 기능들을 제공해 주지만  

docker-compose 를 이용한 컨테이너 연동,

jenkins 배포 자동화를 위한 docker in docker 등  

깊게 학습해야할 부분도 많이 있는 것 같습니다. 

여러번 배포를 시도해 보고, 직접 사용해 보면서 익숙해져 나가야 겠습니다.