algorithmic_trading / scripts /docker-build.sh
Edwin Salguero
Add comprehensive Docker Hub integration with deployment scripts and documentation
9fb1755
#!/bin/bash
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to print colored output
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Function to build the Docker image
build_image() {
print_status "Building Docker image..."
docker build -t algorithmic-trading:latest .
if [ $? -eq 0 ]; then
print_success "Docker image built successfully"
else
print_error "Failed to build Docker image"
exit 1
fi
}
# Function to run tests in Docker
run_tests() {
print_status "Running tests in Docker..."
docker run --rm -v $(pwd):/app algorithmic-trading:latest pytest -v
if [ $? -eq 0 ]; then
print_success "Tests passed"
else
print_error "Tests failed"
exit 1
fi
}
# Function to start development environment
start_dev() {
print_status "Starting development environment..."
docker-compose -f docker-compose.dev.yml up -d
print_success "Development environment started"
print_status "Jupyter Lab available at: http://localhost:8888"
print_status "Trading system available at: http://localhost:8000"
print_status "TensorBoard available at: http://localhost:6006"
}
# Function to start production environment
start_prod() {
print_status "Starting production environment..."
docker-compose -f docker-compose.prod.yml up -d
print_success "Production environment started"
print_status "Trading system available at: http://localhost:8000"
print_status "Grafana available at: http://localhost:3000 (admin/admin)"
print_status "Prometheus available at: http://localhost:9090"
}
# Function to stop all containers
stop_all() {
print_status "Stopping all containers..."
docker-compose -f docker-compose.yml down
docker-compose -f docker-compose.dev.yml down
docker-compose -f docker-compose.prod.yml down
print_success "All containers stopped"
}
# Function to clean up Docker resources
cleanup() {
print_status "Cleaning up Docker resources..."
docker system prune -f
docker volume prune -f
print_success "Cleanup completed"
}
# Function to show logs
show_logs() {
local service=${1:-trading-system}
print_status "Showing logs for $service..."
docker-compose logs -f $service
}
# Function to run a specific command in the container
run_command() {
local command="$1"
print_status "Running command: $command"
docker run --rm -v $(pwd):/app algorithmic-trading:latest $command
}
# Function to show help
show_help() {
echo "Usage: $0 [COMMAND]"
echo ""
echo "Commands:"
echo " build Build the Docker image"
echo " test Run tests in Docker"
echo " dev Start development environment"
echo " prod Start production environment"
echo " hub Start using Docker Hub images"
echo " stop Stop all containers"
echo " cleanup Clean up Docker resources"
echo " logs [SVC] Show logs for a service (default: trading-system)"
echo " run CMD Run a specific command in the container"
echo " deploy Deploy to Docker Hub (requires docker-hub-deploy.sh)"
echo " help Show this help message"
echo ""
echo "Examples:"
echo " $0 build"
echo " $0 dev"
echo " $0 hub"
echo " $0 logs"
echo " $0 run 'python demo.py'"
echo " $0 deploy"
}
# Main script logic
case "${1:-help}" in
build)
build_image
;;
test)
build_image
run_tests
;;
dev)
build_image
start_dev
;;
prod)
build_image
start_prod
;;
stop)
stop_all
;;
cleanup)
cleanup
;;
logs)
show_logs $2
;;
run)
if [ -z "$2" ]; then
print_error "No command specified"
show_help
exit 1
fi
build_image
run_command "$2"
;;
hub)
print_status "Starting services using Docker Hub images..."
if [ -z "$DOCKER_USERNAME" ]; then
print_error "DOCKER_USERNAME environment variable not set"
print_status "Please set it: export DOCKER_USERNAME=yourusername"
exit 1
fi
docker compose -f docker-compose.hub.yml up -d
print_success "Docker Hub services started"
print_status "Trading system available at: http://localhost:8000"
print_status "Jupyter Lab available at: http://localhost:8888"
;;
deploy)
print_status "Deploying to Docker Hub..."
if [ -f "scripts/docker-hub-deploy.sh" ]; then
./scripts/docker-hub-deploy.sh "$@"
else
print_error "docker-hub-deploy.sh not found"
exit 1
fi
;;
help|*)
show_help
;;
esac