#!/bin/bash # Docker run script for Hockey Results Application set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Default configuration IMAGE_NAME="hockey-results:latest" CONTAINER_NAME="hockey-results-app" PORT="5000:5000" DATABASE_TYPE="sqlite" VOLUME_MOUNT="" # Function to display usage usage() { echo "Usage: $0 [OPTIONS]" echo "" echo "Options:" echo " -i, --image IMAGE Docker image name (default: hockey-results:latest)" echo " -c, --container NAME Container name (default: hockey-results-app)" echo " -p, --port PORT Port mapping (default: 5000:5000)" echo " -d, --database TYPE Database type: sqlite, postgresql, mysql (default: sqlite)" echo " -v, --volume PATH Mount volume for data persistence" echo " --detach Run container in background" echo " --rm Remove container when it exits" echo " --env KEY=VALUE Set environment variable" echo " -h, --help Show this help message" echo "" echo "Database Types:" echo " sqlite Use SQLite database (default, no external dependencies)" echo " postgresql Use PostgreSQL database" echo " mysql Use MySQL/MariaDB database" echo "" echo "Examples:" echo " $0 # Run with SQLite" echo " $0 -d postgresql # Run with PostgreSQL" echo " $0 -v ./data:/app/data # Run with data persistence" echo " $0 -p 8080:5000 # Run on different port" echo " $0 --detach # Run in background" } # Parse command line arguments DETACH="" REMOVE="" ENV_VARS="" while [[ $# -gt 0 ]]; do case $1 in -i|--image) IMAGE_NAME="$2" shift 2 ;; -c|--container) CONTAINER_NAME="$2" shift 2 ;; -p|--port) PORT="$2" shift 2 ;; -d|--database) DATABASE_TYPE="$2" shift 2 ;; -v|--volume) VOLUME_MOUNT="-v $2" shift 2 ;; --detach) DETACH="-d" shift ;; --rm) REMOVE="--rm" shift ;; --env) ENV_VARS="$ENV_VARS -e $2" shift 2 ;; -h|--help) usage exit 0 ;; *) echo -e "${RED}Unknown option: $1${NC}" usage exit 1 ;; esac done echo -e "${BLUE}🏒 Running Hockey Results Application${NC}" echo -e "${BLUE}====================================${NC}" # Check if Docker is running if ! docker info > /dev/null 2>&1; then echo -e "${RED}❌ Docker is not running. Please start Docker and try again.${NC}" exit 1 fi # Check if image exists if ! docker images -q "$IMAGE_NAME" | grep -q .; then echo -e "${YELLOW}⚠️ Image $IMAGE_NAME not found. Building it first...${NC}" ./docker/build.sh -n "$(echo $IMAGE_NAME | cut -d':' -f1)" -t "$(echo $IMAGE_NAME | cut -d':' -f2)" fi # Stop existing container if running if docker ps -q -f name="$CONTAINER_NAME" | grep -q .; then echo -e "${YELLOW}🛑 Stopping existing container...${NC}" docker stop "$CONTAINER_NAME" fi # Remove existing container if it exists if docker ps -aq -f name="$CONTAINER_NAME" | grep -q .; then echo -e "${YELLOW}🗑️ Removing existing container...${NC}" docker rm "$CONTAINER_NAME" fi # Set environment variables based on database type case $DATABASE_TYPE in "postgresql") ENV_VARS="$ENV_VARS -e DATABASE_TYPE=postgresql" ENV_VARS="$ENV_VARS -e POSTGRES_HOST=host.docker.internal" ENV_VARS="$ENV_VARS -e POSTGRES_PORT=5432" ENV_VARS="$ENV_VARS -e POSTGRES_DATABASE=hockey_results" ENV_VARS="$ENV_VARS -e POSTGRES_USER=hockey_user" ENV_VARS="$ENV_VARS -e POSTGRES_PASSWORD=hockey_password" echo -e "${YELLOW}📊 Using PostgreSQL database${NC}" ;; "mysql") ENV_VARS="$ENV_VARS -e DATABASE_TYPE=mysql" ENV_VARS="$ENV_VARS -e MYSQL_HOST=host.docker.internal" ENV_VARS="$ENV_VARS -e MYSQL_PORT=3306" ENV_VARS="$ENV_VARS -e MYSQL_DATABASE=hockey_results" ENV_VARS="$ENV_VARS -e MYSQL_USER=hockey_user" ENV_VARS="$ENV_VARS -e MYSQL_PASSWORD=hockey_password" echo -e "${YELLOW}📊 Using MySQL/MariaDB database${NC}" ;; "sqlite") ENV_VARS="$ENV_VARS -e DATABASE_TYPE=sqlite" ENV_VARS="$ENV_VARS -e SQLITE_DATABASE_PATH=/app/data/hockey_results.db" VOLUME_MOUNT="$VOLUME_MOUNT -v $(pwd)/data:/app/data" echo -e "${YELLOW}📊 Using SQLite database${NC}" ;; *) echo -e "${RED}❌ Unsupported database type: $DATABASE_TYPE${NC}" echo -e "Supported types: sqlite, postgresql, mysql" exit 1 ;; esac echo -e "${BLUE}🚀 Starting container...${NC}" echo -e " Image: ${GREEN}$IMAGE_NAME${NC}" echo -e " Container: ${GREEN}$CONTAINER_NAME${NC}" echo -e " Port: ${GREEN}$PORT${NC}" echo -e " Database: ${GREEN}$DATABASE_TYPE${NC}" # Run the container docker run \ $DETACH \ $REMOVE \ --name "$CONTAINER_NAME" \ -p "$PORT" \ $VOLUME_MOUNT \ $ENV_VARS \ "$IMAGE_NAME" if [ $? -eq 0 ]; then if [ -n "$DETACH" ]; then echo -e "${GREEN}✅ Container started successfully in background${NC}" echo -e "${BLUE}📝 Container Information:${NC}" docker ps -f name="$CONTAINER_NAME" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" echo -e "${YELLOW}📋 Useful Commands:${NC}" echo -e " View logs: ${BLUE}docker logs $CONTAINER_NAME${NC}" echo -e " Stop container: ${BLUE}docker stop $CONTAINER_NAME${NC}" echo -e " Remove container: ${BLUE}docker rm $CONTAINER_NAME${NC}" echo -e " Access shell: ${BLUE}docker exec -it $CONTAINER_NAME /bin/bash${NC}" else echo -e "${GREEN}✅ Container finished${NC}" fi else echo -e "${RED}❌ Failed to start container${NC}" exit 1 fi