Files
driving-academy/scripts/docker.sh
2025-10-26 23:39:49 -05:00

193 lines
4.4 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 <comando>"
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 "$@"