원하는 자바 버전에 맞게 수정
FROM eclipse-temurin:25-jdk-alpine AS build
WORKDIR /app
COPY build.gradle settings.gradle gradlew ./
COPY gradle ./gradle
COPY src ./src
RUN ./gradlew clean bootJar --no-daemon
FROM eclipse-temurin:25-jre-alpine
WORKDIR /app
COPY --from=build /app/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
MySQL 패스워드와 데이터베이스 수정
compose 컨테이너간 통신만 필요하면 3306 포트포워딩 필요없음
services:
app:
build: .
ports: ["8080:8080"]
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/test
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: test
depends_on:
db:
condition: service_healthy
db:
image: mysql:9
ports: ["3306:3306"]
volumes:
- db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: test
MYSQL_DATABASE: test
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -ptest --silent"]
interval: 5s
timeout: 3s
retries: 20
start_period: 20s
volumes:
db-data:
포트포워딩한 MySQL 경로로 --mysqld.address= 수정
services:
mysqld-exporter:
image: prom/mysqld-exporter
ports: ["9104:9104"]
command:
- "--mysqld.address=localhost:3306"
- "--mysqld.username=root"
environment:
MYSQLD_EXPORTER_PASSWORD: test
prometheus:
image: prom/prometheus
ports: ["9090:9090"]
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
depends_on: ["mysqld-exporter"]
grafana:
image: grafana/grafana
ports: ["3000:3000"]
depends_on: ["prometheus"]
Spring Actuator 경로 지정
global:
scrape_interval: 15s
scrape_configs:
- job_name: "spring"
metrics_path: "/actuator/prometheus"
static_configs:
- targets: ["localhost:8080"]
- job_name: "mysql"
static_configs:
- targets: ["mysqld-exporter:9104"]
.yaml이면 인식 못하는 버그가 있는듯?
management:
endpoints:
web:
exposure:
include: health,prometheus
metrics:
tags:
application: ${spring.application.name}
distribution:
percentiles-histogram:
http.server.requests: true
spring-boot-starter-actuatormicrometer-registry-prometheus그 후 알아서 필요한 grafana dashboard import하면 됨
연동 확인한 대시보드들
