# Comandos Útiles de Docker en Producción

Esta guía contiene los comandos más comunes y útiles para administrar, debugear y operar los contenedores de Docker en tu entorno de producción.

## 1. Ver el estado de los contenedores

Para listar todos los contenedores que están corriendo actualmente y ver sus nombres/IDs:

```bash
docker ps
```

Para ver todos los contenedores (incluyendo los que están detenidos por algún error):

```bash
docker ps -a
```

---

## 2. Reiniciar contenedores

Si necesitas reiniciar todos los contenedores administrados por tu `docker-compose.yml`:

```bash
docker compose restart
```

Si necesitas reiniciar un contenedor específico (por ejemplo, solo el backend, la base de datos o Nginx):

```bash
docker restart <nombre_del_contenedor_o_id>
# Ejemplo: docker restart carfi-crm-back-1
```

---

## 3. Ejecutar comandos dentro de un contenedor ("Tirar comandos")

Para ejecutar herramientas como `php artisan`, `npm`, o tirar comandos en la terminal de un contenedor que ya está arriba, usamos `docker exec`.

**Sintaxis básica:**

```bash
docker exec -it <nombre_del_contenedor> <comando>
```

*(El flag `-it` te da una terminal interactiva, útil para que los comandos se vean bien y puedas interactuar).*

**Ejemplos muy útiles para el Backend (Laravel):**
Supongamos que tu contenedor de backend se llama `carfi_backend`.

* **Entrar directamente a la terminal dentro del contenedor:**

    ```bash
    docker exec -it carfi_backend bash
    # Si te dice que bash no existe, prueba usando 'sh': docker exec -it carfi_backend sh
    ```

* **Correr migraciones de base de datos:**

    ```bash
    docker exec -it carfi_backend php artisan migrate
    ```

* **Limpiar toda la caché del framework:**

    ```bash
    docker exec -it carfi_backend php artisan optimize:clear
    ```

* **Instalar nuevas dependencias con Composer:**

    ```bash
    docker exec -it carfi_backend composer install
    ```

---

## 4. Ver los Logs (Fundamental para debugear)

Cuando el sistema tira un "Error 500" o algo no levanta, los logs son lo primero que debes mirar.

**Ver los últimos logs de un contenedor:**

```bash
docker logs <nombre_del_contenedor>
```

**Ver los logs EN VIVO (ideal cuando estás probando si algo funciona):**

```bash
docker logs -f <nombre_del_contenedor>
# (Presiona Ctrl + C para salir)
```

**Ver solo las últimas 100 líneas y quedarse viéndolos en vivo:**

```bash
docker logs -f --tail 100 <nombre_del_contenedor>
```

---

## 5. Levantar y Bajar el entorno completo

Si usas el archivo `docker-compose.yml` (es lo más habitual):

**Levantar todos los contenedores y dejarlos corriendo en segundo plano (`-d`):**

```bash
docker compose up -d
```

**Apagar y remover los contenedores de la red actual:**

```bash
docker compose down
```

**Volver a construir las imágenes y levantar (si cambiaste Dockerfiles o dependencias base):**

```bash
docker compose up -d --build
```

---

## 6. Monitoreo de memoria y CPU

Si notas que el servidor está pesado o se traba, puedes inspeccionar en tiempo real cuánto consume cada contenedor:

```bash
docker stats
```

*(Presiona Ctrl + C para salir de la ventana de monitoreo).*

---

## 7. Mantenimiento y limpieza del servidor (⚠️ Precaución)

Con el tiempo, Docker acumula imágenes viejas y contenedores apagados que comen mucho disco duro.

**Eliminar contenedores detenidos, redes sin uso e imágenes colgadas (muy seguro de usar):**

```bash
docker system prune
```

**Eliminar todo incluyendo volúmenes sin uso:**
*(⚠️ ¡OJO! Esto puede borrar datos de la base de datos si la base de datos está detenida en ese momento. Úsalo bajo tu propio riesgo).*

```bash
docker system prune --volumes
```
