services: # PostgreSQL Database postgres: image: postgres:18-alpine environment: POSTGRES_DB: mydb POSTGRES_USER: user POSTGRES_PASSWORD: password ports: - "${POSTGRES_PORT:-5432}:5432" volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U user -d mydb"] interval: 10s timeout: 5s retries: 5 deploy: resources: limits: cpus: "1.0" memory: 512m networks: - spring-network # Spring Boot Application spring-app: build: context: . dockerfile: Dockerfile environment: SPRING_BOOT_PORT: ${SPRING_BOOT_PORT:-8080} SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/mydb SPRING_DATASOURCE_USERNAME: user SPRING_DATASOURCE_PASSWORD: password SPRING_JPA_HIBERNATE_DDL_AUTO: update SPRING_JPA_SHOW_SQL: "true" ports: - "${SPRING_BOOT_PORT:-8080}:${SPRING_BOOT_PORT:-8080}" depends_on: postgres: condition: service_healthy deploy: resources: limits: cpus: "2.0" memory: 768m networks: - spring-network restart: unless-stopped volumes: postgres-data: driver: local networks: spring-network: driver: bridge