Babu Pallam
chore(devops): add docker lifecycle management script
95ba7ad
Raw
History Blame Contribute Delete
4.51 kB
# PURPOSE:
# One command manager for Docker-based KnowFlow AI workflow.
#
# USAGE:
#
# chmod +x scripts/docker_manager.sh
#
# ./scripts/docker_manager.sh build
# ./scripts/docker_manager.sh start
# ./scripts/docker_manager.sh stop
# ./scripts/docker_manager.sh restart
# ./scripts/docker_manager.sh rebuild
# ./scripts/docker_manager.sh test
# ./scripts/docker_manager.sh demo
# ./scripts/docker_manager.sh shell
# ./scripts/docker_manager.sh logs
# ./scripts/docker_manager.sh streamlit
# ./scripts/docker_manager.sh restart-ui
# ./scripts/docker_manager.sh status
# ============================================================
#!/bin/bash
set -e
PROJECT_NAME="KnowFlow AI"
DEV_SERVICE="knowflow-dev"
STREAMLIT_SERVICE="knowflow-streamlit"
print_line() {
echo "============================================================"
}
print_title() {
print_line
echo "$1"
print_line
}
check_env_file() {
if [ ! -f ".env" ]; then
print_title "WARNING: .env file not found"
echo "Creating .env from .env.example..."
cp .env.example .env
echo
echo "IMPORTANT:"
echo "Open .env and add your real CLOUD_API_KEY before running the app."
echo
fi
}
build_image() {
check_env_file
print_title "Building Docker image for $PROJECT_NAME"
docker compose build
}
start_dev() {
check_env_file
print_title "Starting JupyterLab development container"
docker compose up "$DEV_SERVICE"
}
start_streamlit() {
check_env_file
print_title "Starting Streamlit demo application"
docker compose --profile streamlit up "$STREAMLIT_SERVICE"
}
stop_all() {
print_title "Stopping Docker containers"
docker compose down
}
restart_streamlit() {
print_title "Restarting Streamlit demo application"
docker compose down
docker compose --profile streamlit up "$STREAMLIT_SERVICE"
}
rebuild_all() {
check_env_file
print_title "Rebuilding Docker image from scratch"
docker compose down
docker compose build --no-cache
docker compose --profile streamlit up "$STREAMLIT_SERVICE"
}
run_tests() {
check_env_file
print_title "Running tests inside Docker"
docker compose run --rm "$DEV_SERVICE" pytest tests/
}
run_phase2_demo() {
check_env_file
print_title "Running Phase 2 modular RAG demo inside Docker"
docker compose run --rm "$DEV_SERVICE" python scripts/run_phase2_demo.py
}
open_shell() {
check_env_file
print_title "Opening shell inside Docker container"
docker compose run --rm "$DEV_SERVICE" bash
}
show_logs() {
print_title "Showing Docker logs"
docker compose logs -f
}
show_status() {
print_title "Docker status"
docker ps
echo
docker compose ps
}
clean_docker() {
print_title "Cleaning stopped containers and unused Docker cache"
docker compose down
docker system prune -f
}
show_help() {
print_title "$PROJECT_NAME Docker Manager"
echo "Usage:"
echo
echo "./scripts/docker_manager.sh build # Build Docker image"
echo "./scripts/docker_manager.sh start # Start JupyterLab"
echo "./scripts/docker_manager.sh streamlit # Start Streamlit app"
echo "./scripts/docker_manager.sh stop # Stop containers"
echo "./scripts/docker_manager.sh restart-ui # Restart Streamlit app"
echo "./scripts/docker_manager.sh rebuild # Full rebuild and start Streamlit"
echo "./scripts/docker_manager.sh test # Run pytest inside Docker"
echo "./scripts/docker_manager.sh demo # Run Phase 2 RAG CLI demo"
echo "./scripts/docker_manager.sh shell # Open Docker shell"
echo "./scripts/docker_manager.sh logs # Show Docker logs"
echo "./scripts/docker_manager.sh status # Show Docker status"
echo "./scripts/docker_manager.sh clean # Clean Docker cache"
echo
}
COMMAND="$1"
case "$COMMAND" in
build)
build_image
;;
start)
start_dev
;;
streamlit)
start_streamlit
;;
stop)
stop_all
;;
restart-ui)
restart_streamlit
;;
rebuild)
rebuild_all
;;
test)
run_tests
;;
demo)
run_phase2_demo
;;
shell)
open_shell
;;
logs)
show_logs
;;
status)
show_status
;;
clean)
clean_docker
;;
*)
show_help
;;
esac