193 lines
6.2 KiB
Bash
193 lines
6.2 KiB
Bash
#!/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
|