각 서비스를 각각 실행시키는 방법에서 도커 컴포즈를 이용하여 한 번에 띄우는 방법을 정리하였다.
# build 에서 사용할 이미지
FROM gradle:8.10.1-jdk17 AS build
WORKDIR /app
ARG FILE_DIRECTORY
COPY $FILE_DIRECTORY /app
RUN gradle clean bootJar
# 실제 컨테이너로 만들 이미지 베이스
FROM openjdk:17-jdk-slim
# build 단계로부터 파일을 가져올 수 있다. AS build로 선언해놨기에 --from=build
COPY --from=build /app/build/libs/*SNAPSHOT.jar /app.jar
CMD ["java", "-jar", "app.jar"]
services:
eureka:
build:
dockerfile: Dockerfile
args:
- FILE_DIRECTORY=./eureka-server
gateway:
build:
dockerfile: Dockerfile
args:
- FILE_DIRECTORY=./gateway
ports:
- "19091:19091"
auth:
build:
dockerfile: Dockerfile
args:
- FILE_DIRECTORY=./auth
tms:
build:
dockerfile: Dockerfile
args:
- FILE_DIRECTORY=./tms
spring:
application:
name: eureka-server
server:
port: 19090
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://eureka:19090/eureka/ # <- localhost를 eureka로 변경
#eureka:
#instance:
#hostname: localhost
server:
port: 19095
spring:
application:
name: auth-service
datasource:
url: jdbc:mysql://host.docker.internal:3306/tms # <- localhost를 host.docker.internal로 변경
username: root
password: 1234
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
show_sql: true
format_sql: true
use_sql_comments: true
jwt:
secret:
key: "401b09eab3c013d4ca54922bb802bec8fd5318192b0a75f201d8b3727429080fb337591abd3e44453b954555b7a0812e1081c39b740293f765eae731f5a65"
eureka:
client:
service-url:
defaultZone: http://eureka:19090/eureka/ # <- localhost를 eureka로 변경
이때 mysql이 접근되지 않을 경우
1. my.ini 파일 경로를 찾은 후
SHOW VARIABLES LIKE 'basedir';
SHOW VARIABLES LIKE 'datadir';
bind-address = 0.0.0.0
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
netstat -an | find "3306"