1+ services :
2+ mysql-db :
3+ image : mysql:8.0
4+ container_name : mysql-db
5+ environment :
6+ MYSQL_ROOT_PASSWORD : root
7+ MYSQL_DATABASE : post
8+ volumes :
9+ - ./mysql:/var/lib/mysql
10+ - ./initdb:/docker-entrypoint-initdb.d:ro
11+ healthcheck :
12+ test : ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
13+ timeout : 5s
14+ retries : 5
15+ deploy :
16+ resources :
17+ limits :
18+ cpus : ' 1.0'
19+ memory : 512m
20+
21+ # spring-app:
22+ # build: ./ejem-1
23+ # environment:
24+ # - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/post
25+ # - SPRING_DATASOURCE_PASSWORD=root
26+ # - SPRING_DATASOURCE_USERNAME=root
27+ # ports:
28+ # - "8090:8080"
29+ # depends_on:
30+ # mysql-db:
31+ # condition: service_healthy
32+ # deploy:
33+ # resources:
34+ # limits:
35+ # cpus: '1.0'
36+ # memory: 512m
37+
38+ # spring-app:
39+ # build: ./ejem-2-cache
40+ # environment:
41+ # - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/post
42+ # - SPRING_DATASOURCE_PASSWORD=root
43+ # - SPRING_DATASOURCE_USERNAME=root
44+ # ports:
45+ # - "8090:8080"
46+ # depends_on:
47+ # mysql-db:
48+ # condition: service_healthy
49+ # deploy:
50+ # resources:
51+ # limits:
52+ # cpus: '1.0'
53+ # memory: 512m
54+
55+ # spring-app:
56+ # build: ./ejem-2-cache
57+ # environment:
58+ # - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/post
59+ # - SPRING_DATASOURCE_PASSWORD=root
60+ # - SPRING_DATASOURCE_USERNAME=root
61+ # depends_on:
62+ # mysql-db:
63+ # condition: service_healthy
64+ # deploy:
65+ # replicas: 3 # Con LB
66+ # resources:
67+ # limits:
68+ # cpus: '1.0'
69+ # memory: 512m
70+
71+ spring-app :
72+ build : ./ejem-2-cache-redis
73+ environment :
74+ - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/post
75+ - SPRING_DATASOURCE_PASSWORD=root
76+ - SPRING_DATASOURCE_USERNAME=root
77+ - SPRING_REDIS_HOST=redis_t3
78+ - SPRING_REDIS_PORT=6379
79+ depends_on :
80+ mysql-db :
81+ condition : service_healthy
82+ deploy :
83+ replicas : 3 # Con LB
84+ resources :
85+ limits :
86+ cpus : ' 1.0'
87+ memory : 512m
88+
89+ haproxy :
90+ image : haproxy:latest
91+ container_name : lb_demo
92+ volumes :
93+ - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
94+ ports :
95+ - " 80:80" # Tráfico de la App
96+ - " 8404:8404" # Estadísticas
97+ depends_on :
98+ - spring-app
99+
100+ redis :
101+ image : redis:alpine
102+ container_name : redis_t3
103+
104+ # --- MONITORING (PROMETHEUS & GRAFANA) ---
105+ prometheus :
106+ image : prom/prometheus:latest
107+ container_name : prometheus
108+ volumes :
109+ - ./prometheus.yml:/etc/prometheus/prometheus.yml
110+ ports :
111+ - " 9090:9090"
112+
113+ grafana :
114+ image : grafana/grafana:latest
115+ container_name : grafana
116+ ports :
117+ - " 3000:3000"
118+ environment :
119+ - GF_SECURITY_ADMIN_PASSWORD=admin
120+ volumes :
121+ - ./grafana/:/etc/grafana/provisioning/
122+ depends_on :
123+ - prometheus
124+
125+ # --- CADVISOR ---
126+ # Si falla con el mensaje "too many open files", hay que aumentar los descriptores de ficheros: `sudo sysctl -w fs.inotify.max_user_instances=8192`
127+ cadvisor :
128+ image : gcr.io/cadvisor/cadvisor:latest
129+ container_name : cadvisor
130+ privileged : true
131+ command : --docker_only --disable_metrics=percpu,process,sched,tcp,udp,disk,diskIO
132+ ports :
133+ - " 8088:8080"
134+ volumes :
135+ - /:/rootfs:ro
136+ - /var/run:/var/run:rw
137+ - /sys:/sys:ro
138+ - /var/lib/docker/:/var/lib/docker:ro
139+ restart : always
0 commit comments