본문 바로가기
DevOps

docker ) table is not exist..

by 어렵다어려웡 2021. 7. 12.

도커를 사용할 때 RDS를 사용하고 싶다면

본인이 만든 프로젝트 + DB의 이미지까지 최소 2개의 컨테이너가 생성되어야 한다.

 

그리고 2개의 컨테이너는 하나의 네트워크에 의해서 결합이 되어있어야하고 서로 통신이 가능한 상태여야 한다.

 

이전의 포스팅에서 생각해볼 때 MySQL Server에 연결이 허용되지 않았던 이유는

 

솔직히 모르겠다. 그저 'docker system prune' 을 통해서 여태 있던 캐시가 사라지고 처음으로 돌려 시도하여

성공이 되었으니 말이다..

 

여튼 이후에 테이블이 없다는 에러가 발생했음,

여기서 착각한 것이 존재한다

 

1. application.properties

spring.datasource.url=jdbc:mysql://test-db:3306/exdocker?serverTimezone=Asia/Seoul

 

MySQL의 url을 도커 컨테이너로 만든 DB 이미지의 주소를 가리킨다.

그러니 결국에는 해당 컨테이너에 존재하는 DB를 가리킴을 의미하게 됨을 알게되었음..

 

그래서 직접 해당 컨테이너에 접근하여 mysql 명령어를 통해서 정보들을 확인해 보았다.

 

아니나 다를까..  도커 이미지로 생성해낸 컨테이너에 있는 Mysql에는 테스트용 테이블이 존재하지 않았다.

 

그래서 우선은 직접 테이블을 생성시키고 insert 테스트를 거치고 직접 웹을 통해서 Select 하는 페이지로 넘어가 보았다.

 

정상적으로 도커 컨테이너의 DB에서 정보를 보여주게 되었음.

또한 컨테이너를 끄고 재시작 했을 때도 DB의 정보가 초기화 되지 않고 그대로 있음.

 


의문점1

이런식으로 도커이미지를 실행했을 경우 DB에는 테이블이 존재하지 않게된다.

도커 이미지가 처음 빌드 될 때 해당 컨테이너의 DB에 테이블을 생성시키는 방법은?

 

이 고민은 MyBatis이기 때문에 나타날 수 있다고 생각함.

 

이유는 JPA의 경우 애플리케이션이 실행되면 Domain과 매핑하여 자동으로 테이블이 생성되기 때문에

어떻게 해야 도커 이미지 빌드 시 테이블을 미리 생성시킬지에 대한 고민이 필요없을거라 생각함.

'DevOps' 카테고리의 다른 글

Jenkins - 로컬 환경에서 구성 및 경험해보기  (0) 2022.04.26
MSA  (0) 2022.04.08
Docker) Host 'ip' is not allowed to connect to this MySQL Server  (0) 2021.07.10
Docker Network 명령어  (0) 2021.07.10
Shell 에서 Docker 명령어 정리  (0) 2021.07.06