#!/bin/bash # Scripts de utilidades para Docker set -e # Colores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Funciones de utilidad log_info() { echo -e "${BLUE}ℹ️ $1${NC}" } log_success() { echo -e "${GREEN}✅ $1${NC}" } log_warning() { echo -e "${YELLOW}⚠️ $1${NC}" } log_error() { echo -e "${RED}❌ $1${NC}" } # Función para construir la imagen build() { log_info "Construyendo imagen Docker..." docker build -t balotario:latest . log_success "Imagen construida exitosamente" } # Función para ejecutar en desarrollo dev() { log_info "Iniciando contenedor en modo desarrollo..." docker run -it --rm \ -p 5000:5000 \ -v $(pwd):/app \ -e FLASK_ENV=development \ -e FLASK_DEBUG=true \ -e DOCKER_CONTAINER=true \ --name balotario-dev \ balotario:latest } # Función para ejecutar en producción prod() { log_info "Iniciando contenedor en modo producción..." docker run -d \ -p 5000:5000 \ -e FLASK_ENV=production \ -e FLASK_DEBUG=false \ -e DOCKER_CONTAINER=true \ --name balotario-prod \ --restart unless-stopped \ balotario:latest log_success "Contenedor iniciado en modo producción" log_info "Accede a: http://localhost:5000" } # Función para usar Docker Compose compose_up() { log_info "Iniciando servicios con Docker Compose..." docker-compose up -d log_success "Servicios iniciados" log_info "Aplicación: http://localhost:5000" log_info "Nginx: http://localhost:80" } # Función para detener Docker Compose compose_down() { log_info "Deteniendo servicios..." docker-compose down log_success "Servicios detenidos" } # Función para ver logs logs() { local service=${1:-balotario} log_info "Mostrando logs de $service..." docker-compose logs -f $service } # Función para limpiar contenedores e imágenes clean() { log_warning "Limpiando contenedores e imágenes..." # Detener contenedores docker stop balotario-dev balotario-prod 2>/dev/null || true docker rm balotario-dev balotario-prod 2>/dev/null || true # Limpiar con docker-compose docker-compose down --rmi all --volumes --remove-orphans 2>/dev/null || true # Limpiar imágenes huérfanas docker image prune -f log_success "Limpieza completada" } # Función para mostrar estado status() { log_info "Estado de contenedores:" docker ps -a --filter "name=balotario" echo "" log_info "Estado de servicios Docker Compose:" docker-compose ps } # Función para entrar al contenedor shell() { local container=${1:-balotario-prod} log_info "Entrando al contenedor $container..." docker exec -it $container /bin/bash } # Función de ayuda help() { echo "🐳 Scripts de Docker para Balotario" echo "" echo "Uso: $0 " echo "" echo "Comandos disponibles:" echo " build - Construir imagen Docker" echo " dev - Ejecutar en modo desarrollo" echo " prod - Ejecutar en modo producción" echo " compose-up - Iniciar con Docker Compose" echo " compose-down - Detener Docker Compose" echo " logs [service]- Ver logs (default: balotario)" echo " clean - Limpiar contenedores e imágenes" echo " status - Mostrar estado de contenedores" echo " shell [name] - Entrar al contenedor" echo " help - Mostrar esta ayuda" echo "" echo "Ejemplos:" echo " $0 build" echo " $0 compose-up" echo " $0 logs nginx" echo " $0 shell balotario-prod" } # Función principal main() { case "${1:-help}" in build) build ;; dev) build dev ;; prod) build prod ;; compose-up) compose_up ;; compose-down) compose_down ;; logs) logs $2 ;; clean) clean ;; status) status ;; shell) shell $2 ;; help|*) help ;; esac } # Verificar que Docker esté instalado if ! command -v docker &> /dev/null; then log_error "Docker no está instalado" exit 1 fi # Ejecutar función principal main "$@"