version: '3.8' services: inference-pipeline: build: context: . dockerfile: Dockerfile target: production container_name: inference-pipeline ports: - "8080:8080" volumes: - ./data:/app/data - ~/.kaggle:/home/appuser/.kaggle:ro environment: - PYTHONPATH=/app - MODEL_TYPE=distilbert - PYTHONUNBUFFERED=1 - OMP_NUM_THREADS=4 - MKL_NUM_THREADS=4 command: python -m inference_pipeline.main serve --host 0.0.0.0 --port 8080 healthcheck: test: ["CMD", "python", "/app/scripts/health_check.py", "--host", "localhost", "--port", "8080"] interval: 30s timeout: 10s retries: 3 start_period: 60s restart: unless-stopped mem_limit: 2g cpus: '2.0' prometheus: image: prom/prometheus:latest container_name: inference-prometheus ports: - "9090:9090" volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus-data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' restart: unless-stopped profiles: - monitoring grafana: image: grafana/grafana:latest container_name: inference-grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - grafana-data:/var/lib/grafana restart: unless-stopped profiles: - monitoring # Optional: Batch processing mode batch-processor: build: context: . dockerfile: Dockerfile target: production container_name: inference-batch volumes: - ./data:/app/data - ~/.kaggle:/home/appuser/.kaggle:ro environment: - PYTHONPATH=/app - OMP_NUM_THREADS=4 - MKL_NUM_THREADS=4 command: > sh -c "python -m inference_pipeline.main run --input data/input.csv --output data/output.csv --model-type vader --batch-size 1000" restart: "no" mem_limit: 2g cpus: '2.0' profiles: - batch volumes: data: driver: local prometheus-data: grafana-data: networks: default: name: inference-network