Eureka = "서비스 디스커버리 서버"
ex) orderService가 userService에 요청 원함 -> cloud환경이라 IP/Port 번호 계속 바뀌어서 연결 어떻게 해야할지 난감
-> Eureka에 위치 등록해두면, 서로 연결시킬 수 있음.
=> 서비스 레지스트리(eureka server에 등록) + 서비스 디스커버리(말그대로 위치 찾는 것)
$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v /Users/~~~:/var/lib/mysql -d mysql
-> docker compose up으로 간소화. ( 파일 생성만 해두면 )
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: pwd1234
driver-class-name: com.mysql.cj.jdbc.Driver
FROM openjdk:17-jdk
COPY build/libs/*SNAPSHOT.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
services:
my-server:
build: . # Dockerfile 있는 위치
ports:
- 8080:8080
# my-db의 컨테이너 먼저 생성된 후, healthy 하면 해당 컨테이너를 생성.
depends_on:
my-db:
condition: service_healthy
my-db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: pwd1234
MYSQL_DATABASE: mydb # MySQL 최초 실행 시, mydb라는 데이터베이스 생성하겠다
volumes:
- ./mysql_data:/var/lib/mysql
ports:
- 3306:3306
healthcheck:
test: [ "CMD", "mysqladmin", "ping" ] # healthy 판단할 명령어
interval: 5s # 5초 간격으로,
retries: 10 # 10번 재시도하겠단 의미
$ ./gradlew clean build
$ docker compose up -d --build
-> 문제 발생. 프로젝트와 db가 연결 안됨.

각 컨테이너는 자신만의 IP/PORT를 가짐. 호스트 입장에서의 localhost는 host컴퓨터를 가리키지만, spring boot 컨테이너 입장에선 spring boot 컨테이너의 localhost를 가리킴.
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb # 이 부분
username: root
password: pwd1234
driver-class-name: com.mysql.cj.jdbc.Driver
여기서 localhost가 문제. spring boot 컨테이너 입장에서 localhost의 3306 포트 연결하려 한다면, 그 컨테이너 안에서 3306이랑 연결 시도함. 근데 3306에 아무것도 없으니, mysql이랑 연결이 안되는 것.
-> compose.yml에서 정의한 service 이름 (my-db) 활용.
이름이 컨테이너의 주소를 의미하게 되어, 연결 가능해짐.
-> 어떻게 가능? -> docker가 제공해주는 기능.
