Cómo desplegar modelos con Docker en tu computador

Uno de los pasos clave después de entrenar un modelo de Machine Learning es desplegarlo para que otros puedan consumirlo mediante una aplicación, API o servicio. Si bien hay muchas plataformas en la nube para esto, en este artículo te enseñaré cómo hacerlo localmente usando Docker, una herramienta liviana y poderosa para crear entornos portables y replicables.

Este enfoque te permitirá encapsular tu modelo, entorno de ejecución y dependencias en una imagen, que luego podrás ejecutar en cualquier computador sin preocuparte por conflictos o configuraciones.

 

¿Qué es Docker y por qué usarlo para modelos de ML?

Docker es una plataforma que permite empaquetar aplicaciones dentro de contenedores, que son entornos aislados, livianos y portables. Esto es ideal para desplegar modelos, ya que asegura que el código, las librerías, el modelo entrenado y la lógica de inferencia funcionen igual sin importar dónde se ejecuten.

Al desplegar tu modelo con Docker puedes:

  • Compartirlo fácilmente con tu equipo o cliente.
  • Evitar problemas de configuración en diferentes máquinas.
  • Prepararte para moverlo a producción o cloud (AWS, GCP, Azure).
  • Automatizar pruebas, integración continua y versionado del modelo.

 

Requisitos previos

  • Tener Docker instalado en tu computador: https://docs.docker.com/get-docker/
  • Un modelo ya entrenado (por ejemplo, modelo_entrenado.pkl).
  • Python 3.8 o superior instalado.
  • Familiaridad básica con terminal y scripts en Python.

 

Estructura del proyecto

Primero, estructura tu proyecto en una carpeta como esta:

ml-docker-deploy/
│
├── app.py                # Lógica de la API para servir el modelo
├── modelo_entrenado.pkl  # Modelo entrenado con joblib
├── requirements.txt      # Dependencias necesarias
└── Dockerfile            # Instrucciones para construir la imagen

 

Paso 1: Crear una API básica con Flask

app.py
from flask import Flask, request, jsonify
import joblib
import numpy as np

app = Flask(__name__)
modelo = joblib.load("modelo_entrenado.pkl")

@app.route("/predict", methods=["POST"])
def predict():
    data = request.get_json()
    features = np.array(data["features"]).reshape(1, -1)
    prediction = modelo.predict(features)
    return jsonify({"prediction": int(prediction[0])})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

Esta API expone un endpoint /predict que espera una lista de características (features) en formato JSON.

 

Paso 2: Definir dependencias

requirements.txt
flask
scikit-learn
joblib
numpy

 

Paso 3: Crear el Dockerfile

Dockerfile
# Imagen base con Python
FROM python:3.10-slim

# Directorio de trabajo
WORKDIR /app

# Copiar archivos
COPY . /app

# Instalar dependencias
RUN pip install --no-cache-dir -r requirements.txt

# Exponer el puerto de Flask
EXPOSE 5000

# Comando para ejecutar la app
CMD ["python", "app.py"]

 

Paso 4: Construir y ejecutar el contenedor

Construir la imagen

Abre tu terminal y ve al directorio del proyecto:

docker build -t ml-model-api .
Ejecutar el contenedor
docker run -p 5000:5000 ml-model-api

Esto expone tu modelo localmente en http://localhost:5000.

 

Paso 5: Probar la API

Usa curl, Postman o cualquier cliente HTTP:

curl -X POST http://localhost:5000/predict \
     -H "Content-Type: application/json" \
     -d '{"features": [5.1, 3.5, 1.4, 0.2]}'

 

Respuesta esperada:

{"prediction": 0}

 

Buenas prácticas y siguientes pasos

  • Agrega validación de entrada y manejo de errores.
  • Integra un pipeline completo (scaler + modelo) dentro del contenedor.
  • Versiona tus modelos y automatiza despliegues con CI/CD.
  • Usa docker-compose si necesitas una arquitectura más compleja.

 

Conclusión

Desplegar un modelo con Docker te da portabilidad, reproducibilidad y control total sobre el entorno de ejecución. Aunque este artículo cubre un caso local, los mismos principios te servirán para escalar tu solución a servicios en la nube o microservicios productivos. Con este flujo tienes el primer paso concreto para llevar tu modelo del notebook a una API funcional y real.

 

Whatsapp Mentores Tech