Módulo 4: Ollama - Introducción

Docker Deployment de Ollama

Descripción

Aprenderás a ejecutar Ollama en Docker container para deployment en servidores.

Tiempo: 40 minutos
Dificultad: Media-Alta


🎯 Objetivos

  • ✅ Ejecutar Ollama en Docker
  • ✅ Persistent storage (modelos)
  • ✅ Docker Compose setup
  • ✅ Network configuration

📦 Prerequisito: Docker

Instalar Docker:

macOS/Windows:

Linux:

curl -fsSL https://get.docker.com | sh

Verificar:

docker --version

🚀 Run Ollama in Docker

Método 1: Docker run (simple):

docker run -d \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  --name ollama \
  ollama/ollama

Explicación:

  • -d: Background
  • -v ollama:/root/.ollama: Persistent storage (modelos)
  • -p 11434:11434: Expone puerto
  • --name ollama: Nombre container

Pull modelo dentro del container:

docker exec -it ollama ollama pull mistral

Test API:

curl http://localhost:11434/api/tags

🐳 Método 2: Docker Compose (recomendado)

docker-compose.yml:

version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    restart: unless-stopped
    environment:
      - OLLAMA_HOST=0.0.0.0

volumes:
  ollama_data:

Start:

docker-compose up -d

Stop:

docker-compose down

Logs:

docker-compose logs -f ollama

🖥️ Con GPU (NVIDIA)

Dockerfile con CUDA:

version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    restart: unless-stopped
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

volumes:
  ollama_data:

Prerequisito: NVIDIA Container Toolkit


📦 Stack Completo: Ollama + App

docker-compose.yml (Ollama + Python app):

version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    restart: unless-stopped

  chatbot:
    build: .
    container_name: chatbot
    depends_on:
      - ollama
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    ports:
      - "8000:8000"

volumes:
  ollama_data:

Dockerfile (Python app):

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY chatbot.py .

CMD ["python", "chatbot.py"]

requirements.txt:

openai==1.12.0

chatbot.py:

from openai import OpenAI
import os

client = OpenAI(
    base_url=os.getenv("OLLAMA_BASE_URL", "http://localhost:11434") + "/v1",
    api_key="ollama"
)

# Tu código de chatbot aquí

Start stack:

docker-compose up -d

🔧 Management Commands

Pull modelo:

docker exec ollama ollama pull mistral

List modelos:

docker exec ollama ollama list

Logs:

docker logs ollama -f

Restart:

docker restart ollama

Exec interactivo:

docker exec -it ollama bash

📊 Production Best Practices

1. Health checks:

services:
  ollama:
    # ... config ...
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"]
      interval: 30s
      timeout: 10s
      retries: 3

2. Resource limits:

services:
  ollama:
    # ... config ...
    deploy:
      resources:
        limits:
          memory: 16G
          cpus: '4'

3. Logging:

services:
  ollama:
    # ... config ...
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

🐛 Troubleshooting

Error: Cannot connect

# Verifica container running
docker ps

# Verifica logs
docker logs ollama

Error: Out of memory

# Aumenta memory limit
docker update --memory 16g ollama

✅ Resumen

  • Ollama en Docker: Production-ready
  • Persistent storage con volumes
  • Docker Compose: Multi-container
  • GPU support (opcional)
  • Health checks y resource limits

Siguiente: 07-performance-tuning.md

Optimizarás performance de Ollama (GPU, RAM, quantization).

Tiempo: 20 min