프로젝트에서는 RDS로 DB를 만들어 배포 했는데 RDS는 유지에 비용이 많이들어가서 mysql로 변경 하게 되었다.
참고!
컨테이너 실행(start or compose 파일 실행) 중 서버가 멈추는 경우에는 보통 메모리 문제이다 > 게시글 이동
docker-compose 파일을 통해 spring + mysql 을 한 번에 설치하는 방법이다. docker-compose.yml을 생성하고 application.properties을 수정하면 된다.
mysql 컨테이너를 만들고 세팅하는 방법도 있지만 compose를 통해 한번에 처리할 수도 있다.
(※ redis도 사용하였기 때문에 redis +mysql + spring app 세 개 기재)
version: '3'
services:
spring-app:
image: test/test:latest
container_name: spring-app
ports:
- "8080:8080"
depends_on:
- redis
- mysql
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/test
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: pwd
redis:
image: redis:latest
container_name: redis
ports:
- "6379:6379"
mysql:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: pwd
MYSQL_DATABASE: test
container_name: mysql
ports:
- "3306:3306"
spring.datasource.url=jdbc:mysql://컨테이너명:3306/test
파일을 수정했으니 jar 파일로 이미지를 만들고 Docker-compose 파일을 서버에 옮겨서 실행시키면 된다. > 세부 방법
로컬과 서버에 DB는 별도임으로 서버의 mysql로 들어가서 DB를 만들어줘야 한다. 서버 명령 프로토콜에 들어가서 아래 명령어 입력 후 DB를 만들면 된다.
docker exec -it mysql bash
mysql -u root -p
Enter password:
1. spring-app은 제일 나중에 실행해야 한다.
Docker-compse의 depends_on은 '지정한 파일을 먼저 실행해라'라는 명령어인데 spring-app에 필요한 redis 나 mysql가 실행되어 있는 상태가 아니라면 spring-app는 컨테이너 생성 후 DB 연결이 되지 않았다는 이유로 바로 종료되어 버린다.
파일에 문제가 없어도 순서 문제로 컨테이너가 다운되는 것이다.
2. 컨테이너는 네트워크가 있어야 같이 사용 가능하다.
서버에 컨테이너만 따로따로 설치(run)한다면 서로 별도의 컨테이너로 인지 하기 때문에 mysql, redis를 사용할 수 없다.
이를 연동 시켜주는 것이 네트워크 인데 Docker-compose의 경우 같은 services 하위에 적으면 네트워크를 자동으로 생성 시켜주기 떄문에 위 파일에서는 따로 생성하지 않았다.
생성된 네트워크명 : ubuntu_default