Módulo 2: Local & Container Deployment

1. Introducción: Local & Container Deployment

Descripción

Esta es la primera cápsula del Módulo 2. Aquí vas a entender por qué deployment local con Docker Compose multi-container es la base de todo lo que viene en esta guía — y por qué "local" no significa "juguete". Un entorno local bien configurado replica producción con fidelidad: misma estructura de servicios, misma configuración de networking, mismos health checks. La diferencia con producción es dónde corre, no cómo está configurado.

Por qué importa: Ya tomaste una decisión informada en el Módulo 1 con tu decision matrix. Independientemente de qué estrategia elegiste, dominar deployment local con Docker Compose es fundamental. Es tu entorno de desarrollo, tu staging, y para muchos casos es producción legítima. Los módulos 4 (LocalStack), 6 (migration), y 8 (integrador) construyen sobre el Compose que configuras aquí.


¿Dónde Estamos en la Guía?

Contexto

Phase 1: Deployment Strategies (Módulos 1-3)
├── Módulo 1: Understanding Deployment Options    ✅ COMPLETADO
├── Módulo 2: Local & Container Deployment        ← ESTÁS AQUÍ
└── Módulo 3: Serverless & Lambda for AI

Phase 2: Cloud Infrastructure & Migration (Módulos 4-6)
Phase 3: Alternatives & Production (Módulos 7-8)

Transición desde Módulo 1

En el Módulo 1 construiste un framework para decidir. Aquí empiezas a implementar. La primera estrategia que dominas es deployment local porque:

  1. Es la base de tu desarrollo diario
  2. Docker Compose es portable a cualquier plataforma
  3. Tu entorno local debe replicar producción
  4. LocalStack (M4) se integra como servicio en tu Compose

Qué Es Docker Compose Multi-Container para AI

De un container a un sistema

La guía de Docker (#15) te enseñó a containerizar tu app: un Dockerfile, un container, un servicio. Pero una app AI de producción no es un solo container:

App AI simple (1 container):
└── FastAPI + OpenAI SDK

App AI de producción (3-5 containers):
├── FastAPI (API gateway)
├── Redis (cache de responses)
├── ChromaDB/Qdrant (vector store)
├── Worker (procesamiento async)
└── Nginx (reverse proxy + SSL)

Docker Compose orquesta todos estos containers como un sistema: los levanta en el orden correcto, conecta sus redes, comparte volúmenes, y verifica que cada uno está healthy antes de aceptar tráfico.

La analogía del restaurante

Un solo container es como un chef que cocina, sirve, y cobra. Funciona si tienes 5 clientes. Docker Compose es como un restaurante organizado: chef en la cocina, meseros sirviendo, cajero cobrando, cada uno con su rol y comunicándose entre sí. Si el chef no está listo, los meseros esperan. Si la caja falla, el restaurante sigue cocinando pero no cobra.

Cada categoría en código

Para que veas la diferencia concreta, así se ve cada patrón:

# Un solo container (guía Docker #15)
docker run -p 8000:8000 my-ai-app

# Docker Compose multi-container (este módulo)
# docker-compose.yml
services:
  api:
    build: ./api
    ports:
      - "8000:8000"
    depends_on:
      cache:
        condition: service_healthy
  cache:
    image: redis:7-alpine
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
# Un comando levanta todo el sistema
docker compose up -d

# Un comando lo apaga
docker compose down

La diferencia clave: con docker run gestionas cada container manualmente. Con Compose, declaras tu sistema completo en un archivo y Compose lo orquesta por ti.


Tecnologías de Este Módulo

HerramientaVersiónQué hace en este módulo
Docker Composev2.20+Orquesta multi-container
FastAPI0.115+API gateway de tu app AI
Redis7.xCache de responses LLM
Python3.10+Lenguaje de la app
OpenAI SDK1.0+Llamadas a LLM
Pydantic2.0+Validación de config y requests
curl-Health checks y testing

Arquitectura de referencia

                    ┌──────────────────────────────────────────┐
                    │         Docker Compose Network           │
                    │                                          │
  User Request ──→  │  ┌─────────┐      ┌─────────┐           │
                    │  │ FastAPI  │ ←──→ │  Redis   │           │
                    │  │ :8000   │      │  :6379  │           │
                    │  │         │      │ (cache) │           │
                    │  │ /health │      └─────────┘           │
                    │  │ /ask    │                             │
                    │  └─────────┘                             │
                    │       │                                  │
                    │       ↓                                  │
                    │  OpenAI API (externo)                    │
                    └──────────────────────────────────────────┘

Cada servicio corre en su propio container, con su propio filesystem, su propia red interna, y sus propios health checks. Docker Compose se encarga de que el orden, la comunicación, y la persistencia funcionen sin intervención manual.


Objetivo del Módulo

Al terminar este módulo serás capaz de:

  • ✅ Diseñar un Docker Compose file para una app AI multi-container (FastAPI + Redis + servicio AI)
  • ✅ Implementar environment configuration por entorno (dev, staging, prod)
  • ✅ Configurar volumes para datos persistentes y networking entre servicios
  • ✅ Implementar health checks que verifican readiness real de cada servicio
  • ✅ Definir dependency ordering correcto entre servicios
  • ✅ Debuggear deployment local con docker compose logs, exec, y troubleshooting
  • ✅ Manejar secrets y API keys de forma segura sin commitear a Git

Objetivo profesional

Cuando necesites mostrar tu app AI a un colega, a un manager, o a un inversor, harás docker compose up y en 30 segundos tendrás un sistema multi-servicio corriendo con health checks, cache, y configuración production-like. Eso es deployment local profesional.


Roadmap del Módulo

#CápsulaQué aprenderásTipo
01Introducción (esta)Context, objetivos, setupIntro
02Docker Compose para AI AppsCompose file, servicios, redes, volúmenesTécnica
03Environment ConfigurationVariables por entorno, .env files, overridesTécnica
04Health Checks y DependenciesReadiness checks, dependency ordering, restart policiesTécnica
05Networking y ComunicaciónRedes internas, puertos, service discoveryTécnica
06Debugging Deployment LocalLogs, exec, troubleshooting de AI appsTécnica
07Secrets y Seguridad LocalAPI keys, .env, Docker secrets, gitignoreTécnica
08Proyecto: Local Multi-Container AI AppCompose completo con FastAPI + Redis + AIProyecto

Duración estimada: 1.25-1.5 horas.


Prerequisitos

Lo que ya sabes (de la guía Docker #15)

  • ✅ Qué es un Dockerfile, image, container
  • ✅ Cómo buildear y correr un container
  • ✅ Comandos básicos: docker build, docker run, docker ps
  • ✅ Dockerizar una app FastAPI

Lo que aprenderás aquí (nuevo)

  • Docker Compose multi-service (no solo un container)
  • Orquestación: ordering, health checks, dependencies
  • Environment config por entorno
  • Debugging de deployment local
  • Secrets management local

Setup Técnico

Verificar herramientas

# Docker
docker --version
# Docker version 24.0+ esperado

# Docker Compose (v2, integrado en Docker Desktop)
docker compose version
# Docker Compose version v2.20+ esperado

# Python
python --version
# Python 3.10+ esperado

Crear estructura del proyecto

mkdir -p module-02/{api,worker}
cd module-02

# Estructura inicial
# module-02/
# ├── api/
# │   ├── main.py
# │   ├── requirements.txt
# │   └── Dockerfile
# ├── worker/
# │   ├── worker.py
# │   ├── requirements.txt
# │   └── Dockerfile
# ├── docker-compose.yml
# ├── docker-compose.override.yml
# ├── .env
# └── .env.example

API key de OpenAI

Necesitas una API key de OpenAI para los ejemplos de este módulo. Si no tienes una:

  1. Ve a platform.openai.com
  2. Crea una cuenta (o usa la existente)
  3. Ve a API Keys → Create new secret key
  4. Copia la key (empieza con sk-proj-...)
# Crea un archivo .env en tu directorio de trabajo
echo "OPENAI_API_KEY=sk-proj-tu-key-aqui" > .env

# NUNCA commitees este archivo a Git
echo ".env" >> .gitignore

Los ejemplos usan gpt-4o-mini que es el modelo más económico (~$0.15/1M input tokens). Un módulo completo de práctica no debería costarte más de $0.50.

Verificación rápida

# Verifica que Docker funciona
docker run --rm hello-world

# Verifica que Compose funciona
echo 'services:
  test:
    image: alpine
    command: echo "Compose works!"' > test-compose.yml

docker compose -f test-compose.yml up
# Output esperado: "Compose works!"

rm test-compose.yml

Verificar todo junto

# Script rápido de verificación completa
echo "=== Docker ===" && docker --version \
  && echo "=== Compose ===" && docker compose version \
  && echo "=== Python ===" && python --version \
  && echo "=== OpenAI key ===" && ([ -f .env ] && echo ".env exists ✅" || echo ".env missing ❌") \
  && echo "=== All checks passed ==="

Si todo muestra versiones correctas y .env exists, estás listo para la cápsula 02.


Conexión con el Proyecto

Proyecto de este módulo: Local Multi-Container AI App

Construirás un Docker Compose completo con:

  • FastAPI como API gateway (recibe requests, los procesa)
  • Redis como cache de responses (evita llamadas repetidas a LLM)
  • Worker (opcional) para procesamiento asíncrono
User Request
    ↓
┌─────────────────────┐
│ FastAPI (api)        │
│ Puerto 8000          │
│ ├── /health          │
│ ├── /ask             │──→ Check Redis cache
│ └── /ask (cache miss)│──→ Call OpenAI → Store in Redis
└─────────────────────┘
         ↕
┌─────────────────────┐
│ Redis (cache)        │
│ Puerto 6379 (interno)│
│ Cache de responses   │
└─────────────────────┘

Este Compose se extiende en módulos posteriores:

  • M4: Agregar LocalStack como servicio (S3, Lambda locales)
  • M6: Usar como entorno de desarrollo para migration a AWS
  • M8: Base del sistema desplegado en producción
Evolución del Compose a lo largo de la guía:

M2: FastAPI + Redis (base)
 ↓
M4: FastAPI + Redis + LocalStack (S3/Lambda local)
 ↓
M6: Mismo Compose, código que funciona contra LocalStack Y AWS
 ↓
M8: Compose local → CI/CD → Plataforma de producción

El Compose que construyes en este módulo no es un ejercicio desechable. Es el artefacto central de la guía — la base sobre la que añades capas de complejidad módulo a módulo.

Que NO es prerequisito (lo aprendes aquí)

Algunos conceptos que podrías pensar que necesitas saber pero que este módulo te enseña:

Concepto¿Lo necesitas antes?Dónde lo aprendes
Docker Compose syntaxNoCápsula 02
.env files y overridesNoCápsula 03
Health checksNoCápsula 04
Docker networkingNoCápsula 05
Docker debuggingNoCápsula 06
Secrets managementNoCápsula 07

Límites: Qué NO Cubre Este Módulo

  • Docker desde cero — Prerequisite: Docker Essentials Guide (#15)
  • Kubernetes — Orquestación a escala enterprise, fuera de scope
  • Deployment a cloud — Eso viene en Módulos 3-8
  • Docker Swarm — Compose es suficiente para el scope de esta guía
  • CI/CD setup — Prerequisite: CI/CD for AI Systems Guide (#16)

Evidencia de Éxito

Al terminar este módulo:

  • docker compose up levanta tu app AI multi-container en <30 segundos
  • ✅ Los health checks verifican que cada servicio está operativo
  • ✅ Redis cachea responses y reduces llamadas a LLM
  • ✅ Puedes cambiar entre configuración dev y staging con un flag
  • ✅ Sabes diagnosticar cuando un servicio no arranca (logs, exec, networking)
  • ✅ Las API keys no están en tu código ni en Git

Test rápido de autoevaluación

Si puedes responder estas preguntas al terminar el módulo, lo dominaste:

  1. ¿Por qué una app AI necesita más de un container?
  2. ¿Qué problema resuelve depends_on con condition: service_healthy?
  3. ¿Cuál es la diferencia entre ports y expose en Compose?
  4. ¿Cómo cambias entre configuración de dev y staging sin modificar el Compose file?
  5. ¿Qué es lo primero que haces cuando un servicio no arranca?

Si alguna te parece difícil ahora, no te preocupes — las respuestas quedan claras a lo largo de las 8 cápsulas.


Resumen

  • Docker Compose multi-container es la base de deployment profesional para AI apps.
  • Un entorno local bien configurado replica producción — no es un juguete.
  • Una app AI típica tiene 3-5 servicios: API, cache, vector store, worker, reverse proxy.
  • Este módulo cubre las 7 habilidades clave: Compose files, env config, health checks, networking, debugging, secrets, y proyecto integrador.
  • Este módulo construye el Compose que se reutiliza en M4 (LocalStack), M6 (migration), y M8 (producción).
  • El proyecto final es una app AI multi-container con FastAPI + Redis funcional.
  • Prerequisito: Docker Essentials Guide (#15). Si sabes hacer docker build y docker run, estás listo.

Recursos Adicionales

  1. Docker Compose Documentation — Referencia oficial completa
  2. Docker Compose File Reference — Especificación del archivo Compose
  3. FastAPI Docker Deployment — Guía oficial de FastAPI con Docker
  4. Redis Docker Hub — Imagen oficial de Redis
  5. Docker Networking Overview — Networking en Docker
  6. Docker Compose Best Practices — Compose en producción