# Usar contenedores para el desarrollo de RAG


## Requisitos previos

Completa [Contenedorizar una aplicación RAG](/guides/rag-ollama/develop/containerize/).

## Descripción general

En esta sección, aprenderás a configurar un entorno de desarrollo para acceder a todos los servicios que necesita tu aplicación RAG generativa. Esto incluye:

- Agregar una base de datos local
- Agregar un servicio de LLM local o remoto

> [!NOTE]
> Puedes ver más ejemplos de aplicaciones GenAI contenedorizadas en las aplicaciones de demostración de [GenAI Stack](https://github.com/docker/genai-stack).

## Agregar una base de datos local

Puedes usar contenedores para configurar servicios locales, como una base de datos. En esta sección, explorarás el servicio de base de datos en el archivo `docker-compose.yaml`.

Para ejecutar el servicio de base de datos:

1. In el directorio del repositorio clonado, abre el archivo `docker-compose.yaml` en un IDE o editor de texto.

2. En el archivo `docker-compose.yaml`, verás lo siguiente:

   ```yaml
   services:
     qdrant:
       image: qdrant/qdrant
       container_name: qdrant
       ports:
         - "6333:6333"
       volumes:
         - qdrant_data:/qdrant/storage
   ```

   > [!NOTE]
   > Para obtener más información sobre Qdrant, consulta la [Imagen Oficial de Docker para Qdrant](https://hub.docker.com/r/qdrant/qdrant).

3. Inicia la aplicación. Dentro del directorio `winy`, ejecuta el siguiente comando en una terminal.

   ```console
   $ docker compose up --build
   ```

4. Accede a la aplicación. Abre un navegador y visualiza la aplicación en [http://localhost:8501](http://localhost:8501). Deberías ver una aplicación Streamlit sencilla.

5. Detén la aplicación. En la terminal, presiona `ctrl`+`c` para detener la aplicación.

## Agregar un servicio de LLM local o remoto

La aplicación de ejemplo es compatible con [Ollama](https://ollama.ai/). Esta guía proporciona instrucciones para los siguientes escenarios:

- Ejecutar Ollama en un contenedor
- Ejecutar Ollama fuera de un contenedor

Aunque todas las plataformas pueden usar cualquiera de los escenarios anteriores, el rendimiento y el soporte de GPU pueden variar. Puedes utilizar las siguientes pautas para ayudarte a elegir la opción adecuada:

- Ejecuta Ollama en un contenedor si estás en Linux y usas una instalación nativa de Docker Engine, o en Windows 10/11 usando Docker Desktop, tienes una GPU compatible con CUDA y tu sistema tiene al menos 8 GB de RAM.
- Ejecuta Ollama fuera de un contenedor si estás ejecutando Docker Desktop en una máquina Linux.

Elige una de las siguientes opciones para tu servicio de LLM.

**Ejecutar Ollama en un contenedor**



Al ejecutar Ollama en un contenedor, debes tener una GPU compatible con CUDA. Aunque puedes ejecutar Ollama en un contenedor sin una GPU compatible, es posible que el rendimiento no sea aceptable. Solo Linux y Windows 11 admiten el acceso de GPU a los contenedores.

Para ejecutar Ollama en un contenedor y proporcionar acceso a la GPU:

1. Instala los requisitos previos.
   - Para Docker Engine en Linux, instala [NVIDIA Container Toolkit](https://github.com/NVIDIA/nvidia-container-toolkit).
   - Para Docker Desktop en Windows 10/11, instala el [controlador NVIDIA](https://www.nvidia.com/Download/index.aspx) más reciente y asegúrate de utilizar el [motor WSL2](/desktop/features/wsl/#turn-on-docker-desktop-wsl-2).
2. El archivo `docker-compose.yaml` ya contiene las instrucciones necesarias. En tus propias aplicaciones, deberás agregar el servicio Ollama en tu `docker-compose.yaml`. El siguiente es el `docker-compose.yaml` actualizado:

   ```yaml
   ollama:
     image: ollama/ollama
     container_name: ollama
     ports:
       - "8000:8000"
     deploy:
       resources:
         reservations:
           devices:
             - driver: nvidia
               count: 1
               capabilities: [gpu]
   ```

   > [!NOTE]
   > Para obtener más detalles sobre las instrucciones de Compose, consulta [Activar el acceso a la GPU con Docker Compose](/compose/how-tos/gpu-support/).

3. Una vez que el contenedor de Ollama esté en funcionamiento, es posible utilizar el script `download_model.sh` dentro de la carpeta `tools` con este comando:

   ```console
   . ./download_model.sh <model-name>
   ```

Descargar un modelo de Ollama puede tomar varios minutos.

**Ejecutar Ollama fuera de un contenedor**



Para ejecutar Ollama fuera de un contenedor:

1. [Instala](https://github.com/jmorganca/ollama) y ejecuta Ollama en tu máquina host.
2. Descarga el modelo en Ollama utilizando el siguiente comando.

   ```console
   $ ollama pull llama2
   ```

3. Elimina el servicio `ollama` del `docker-compose.yaml` y actualiza correctamente las variables de conexión en el servicio `winy`:

   ```diff
   - OLLAMA=http://ollama:11434
   + OLLAMA=<your-url>
   ```



## Ejecutar tu aplicación RAG

En este punto, tienes los siguientes servicios en tu archivo Compose:

- Servicio de servidor para tu aplicación RAG principal
- Servicio de base de datos para almacenar vectores en una base de datos Qdrant
- (opcional) Servicio Ollama para ejecutar el servicio de LLM

Una vez que la aplicación se esté ejecutando, abre un navegador y accede a la aplicación en [http://localhost:8501](http://localhost:8501).

Dependiendo de tu sistema y del servicio de LLM que hayas elegido, puede tomar varios minutos responder.

## Resumen

En esta sección, aprendiste a configurar un entorno de desarrollo para proporcionar acceso a todos los servicios que necesita tu aplicación GenAI.

Información relacionada:

- [Referencia de Dockerfile](/reference/dockerfile/)
- [Referencia del archivo Compose](/reference/compose-file/)
- [Imagen Docker de Ollama](https://hub.docker.com/r/ollama/ollama)
- [Aplicaciones de demostración de GenAI Stack](https://github.com/docker/genai-stack)

## Pasos siguientes

Consulta ejemplos de más aplicaciones GenAI en las [aplicaciones de demostración de GenAI Stack](https://github.com/docker/genai-stack).

