# ============================================================
# DOCKER-COMPOSE.YML COMENTADO PARA CURSO DE PYTHON
# ============================================================

# services: Define los contenedores que queremos crear y gestionar
# Cada servicio representa un contenedor con su configuración específica
services:

  # "curso" es el nombre del servicio (puedes elegir cualquier nombre descriptivo)
  # Este nombre se usa internamente en Docker Compose para referenciar el servicio
  curso:
    
    # image: Especifica qué imagen Docker se usará para crear el contenedor
    # En este caso, usa la imagen "curso" que previamente construiste con "docker build -t curso ."
    # Si la imagen no existe localmente, Docker Compose intentará descargarla de Docker Hub
    image: curso
    
    # container_name: Asigna un nombre específico al contenedor cuando se ejecute
    # Sin esto, Docker Compose generaría un nombre automático como "curso_curso_1"
    # Con esto, el contenedor siempre se llamará exactamente "curso"
    container_name: curso
    
    # ports: Mapea puertos entre el host y el contenedor
    # Formato: "PUERTO_HOST:PUERTO_CONTENEDOR"
    # "7079:7079" significa:
    #   - Puerto 7079 del HOST (tu máquina) → Puerto 7079 del CONTENEDOR
    #   - Puedes acceder a la aplicación desde tu navegador en: http://localhost:7079
    #   - Si cambias a "8080:7079", accederías en: http://localhost:8080
    ports:
      - "7079:7079"
    
    # volumes: Monta directorios del host dentro del contenedor
    # Formato: "RUTA_HOST:RUTA_CONTENEDOR"
    # Esto crea un "enlace en vivo" entre ambos directorios:
    #   - Los cambios en /home/dev/curso/app se reflejan instantáneamente en /app del contenedor
    #   - Los archivos creados en /app del contenedor aparecen en /home/dev/curso/app del host
    # ¡VENTAJA CLAVE!: Puedes editar código en tu editor favorito y se actualiza automáticamente
    volumes:
      - /home/dev/curso/app:/app
    
    # stdin_open: Mantiene abierta la entrada estándar (STDIN)
    # Equivalente a la opción "-i" (--interactive) de "docker run"
    # Es necesario para poder escribir comandos en el contenedor desde tu terminal
    stdin_open: true
    
    # tty: Asigna una pseudo-terminal (TTY) al contenedor
    # Equivalente a la opción "-t" (--tty) de "docker run"
    # Permite que el contenedor funcione como una terminal interactiva normal
    # COMBINACIÓN: stdin_open + tty = Terminal interactiva completa (como "-it" en docker run)
    tty: true
    
    # user: Define con qué usuario se ejecutarán los procesos dentro del contenedor
    # En este caso, todo se ejecuta como el usuario "alumnos" (creado en el Dockerfile)
    # IMPORTANTE: Esto mejora la seguridad al NO ejecutar como root
    # También evita problemas de permisos con los archivos del volumen montado
    user: alumnos