Skip to content
BotServBotServ
OllamaDockerdocker-composeGPUContainerIA localSelf-Hosting

Ollama con Docker: IA local containerizada

Ollama con Docker: instalación, soporte GPU, docker-compose y persistencia. Guía paso a paso para Linux, Windows y macOS.

S

schutzgeist

12 min read
Ollama con Docker: IA local containerizada

Ollama con Docker: IA local containerizada

Qué cubre este artículo sobre Ollama con Docker

  • Cómo iniciar Ollama como contenedor Docker, con y sin GPU
  • Qué significan los volúmenes y el mapeo de puertos para tu contenedor
  • Cómo crear una configuración reproducible con docker-compose
  • Cuáles son las trampas comunes en soporte GPU y persistencia
  • Cómo usar Ollama en Docker en Windows, macOS y Linux

Introducción: Ollama con Docker explicado

Ollama es un runtime para modelos de lenguaje locales. Descargas un modelo y lo ejecutas directamente en tu máquina. Si ya conoces Ollama, sabes que la instalación en Linux, macOS o Windows es rápida. Pero a veces eso no es suficiente. Quizás necesites ejecutar Ollama en un servidor, en un NAS o simplemente mantenerlo separado del resto de tu sistema. Para eso existe Docker.

Docker empaqueta Ollama en un contenedor, un entorno aislado que contiene todo lo que la herramienta necesita para funcionar. Inicia el contenedor, usa el modelo y lo detenes. Sin conflictos con otros programas, sin archivos dispersos en tu sistema. Este artículo te guía paso a paso por la configuración de Ollama con Docker, desde el primer docker pull hasta la configuración final con docker-compose.

Si no conoces Ollama, lee primero la descripción general de Ollama y la guía de instalación de Ollama. Encontrarás los fundamentos de Docker en el artículo Conceptos básicos de Docker.

¿Por qué necesito Docker para Ollama?

Imagina que ya ejecutas varios servicios en tu servidor. Un servidor web funciona, una base de datos también y quizás un servidor multimedia. Ahora quieres agregar Ollama. Sin Docker, lo instalarías directamente en el sistema. Ollama crea archivos en directorios del sistema, configura un servicio y se integra en la configuración de red. Cuando quieras eliminarlo después, generalmente quedan restos.

Con Docker es diferente. Descargas la imagen oficial de Ollama, inicias un contenedor y todo funciona aislado. Para actualizar Ollama, simplemente descargas la imagen más reciente e inicias el contenedor nuevamente. La configuración se mantiene porque está en un volumen. Puedes detener, eliminar y recrear el contenedor sin perder tus modelos.

Docker también te proporciona una configuración reproducible. Defines en un archivo docker-compose.yml cómo debe ejecutarse Ollama y puedes recrear el mismo setup en cualquier máquina o servidor. Esto es especialmente valioso si ejecutas Ollama en múltiples máquinas o deseas compartir tu configuración con otros.

Ollama con Docker en resumen

Descargas la imagen oficial ollama/ollama de Docker Hub, inicias un contenedor con mapeo de puertos para la API y montas un volumen para la persistencia de modelos. Para soporte GPU, agregás el NVIDIA Container Toolkit y pasas la GPU al contenedor con --gpus all. Con docker-compose puedes describir todo el setup en un único archivo e iniciarlo con un solo comando.

¿Para quién es Docker con Ollama?

Docker con Ollama está dirigido a cualquiera que quiera más control y limpieza que con una instalación directa. Eso incluye administradores de servidores que ejecutan múltiples servicios en una máquina y quieren evitar conflictos. Propietarios de NAS que desean ejecutar Ollama en sus dispositivos Synology o Ugreen. Y desarrolladores que necesitan un entorno reproducible para pruebas e integraciones.

Si solo quieres probar Ollama brevemente en tu laptop, la instalación directa es más simple. Pero tan pronto como se trata de operación continua, múltiples modelos o configuraciones de servidor, Docker es la mejor opción.

Términos importantes sobre Ollama y Docker

TérminoSignificado
DockerPlataforma que ejecuta aplicaciones de forma aislada en contenedores
ContenedorInstancia en ejecución de una imagen, aislada del sistema host
ImagenPlantilla para contenedores, contiene todos los archivos y configuraciones
VolumenAlmacenamiento persistente que preserva datos más allá del ciclo de vida del contenedor
docker-composeHerramienta para definir e iniciar múltiples contenedores mediante un archivo YAML
GPU RuntimeExtensión de Docker que proporciona a los contenedores acceso a la tarjeta gráfica
NVIDIA Container ToolkitPaquete de software que pone GPUs Nvidia disponibles en contenedores Docker
Port MappingRedirección de un puerto del host al contenedor para que los servicios sean accesibles desde afuera
PersistenciaPropiedad de que los datos se mantengan incluso después de detener o eliminar el contenedor
Image TagVersionado de una imagen, por ejemplo ollama/ollama:latest

Requisitos previos

Antes de comenzar, necesitas Docker en tu sistema. En Linux instala Docker a través del instalador oficial o el paquete de tu distribución. En Windows y macOS usa Docker Desktop. Encontrarás más detalles en el artículo Conceptos básicos de Docker.

Si quieres ejecutar Ollama con soporte GPU, necesitarás además:

  • Un controlador Nvidia actual en el sistema host
  • NVIDIA Container Toolkit para que Docker pueda acceder a la GPU

En sistemas solo CPU, Docker es suficiente. Encontrarás más detalles sobre la configuración GPU en Docker en el artículo Soporte GPU en Docker. Una descripción general de operación CPU vs. GPU está en CPU vs. GPU.

Paso 1: Descargar imagen de Ollama

Descarga la imagen oficial de Ollama de Docker Hub:

docker pull ollama/ollama

Por defecto, Docker descarga la etiqueta latest. Si quieres una versión específica, especifica la etiqueta explícitamente:

docker pull ollama/ollama:0.3.0

La imagen contiene el binario de Ollama y todas sus dependencias. Es la base para cada contenedor que inicies después.

Paso 2: Iniciar el primer contenedor (CPU)

El inicio más simple sin GPU se ve así:

docker run -d --name ollama -p 11434:11434 ollama/ollama

Los parámetros individuales significan:

  • -d: Inicia el contenedor en segundo plano (detached mode)
  • --name ollama: Le da al contenedor el nombre ollama para que puedas dirigirte a él fácilmente
  • -p 11434:11434: Redirecciona el puerto 11434 del host al contenedor
  • ollama/ollama: La imagen en la que se basa el contenedor

Después del inicio, verifica que el contenedor está en ejecución:

docker ps

La API de Ollama ahora es accesible en http://localhost:11434. Encontrarás más información sobre la API en el artículo Usando la API de Ollama.

Paso 3: Contenedor con soporte GPU

Para soporte GPU, primero necesitas el NVIDIA Container Toolkit. En Ubuntu lo instala así:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Después inicia Ollama con soporte GPU:

docker run -d --gpus all --name ollama-gpu -p 11434:11434 ollama/ollama

El parámetro --gpus all pasa todas las GPUs disponibles al contenedor. Si tienes múltiples GPUs y quieres usar solo una, puedes asignarlo selectivamente:

docker run -d --gpus '"device=0"' --name ollama-gpu -p 11434:11434 ollama/ollama

Para verificar que la GPU se reconoce en el contenedor:

docker exec -it ollama-gpu nvidia-smi

Si nvidia-smi muestra la GPU, todo está configurado correctamente. Encontrarás más detalles sobre la configuración GPU en Soporte GPU en Docker.

Paso 4: Persistencia con volúmenes

Sin un volumen, los modelos descargados se pierden en cuanto eliminas el contenedor. Un volumen almacena los modelos fuera del contenedor, de manera que permanecen intactos incluso después de reiniciar o recrear el contenedor.

docker run -d --gpus all --name ollama-gpu -p 11434:11434 -v ollama-data:/root/.ollama ollama/ollama

El parámetro -v ollama-data:/root/.ollama crea un volumen con nombre llamado ollama-data y lo vincula dentro del contenedor en /root/.ollama. Ahí es donde Ollama almacena los modelos, configuraciones y metadatos.

También puedes usar un directorio local en lugar de un volumen con nombre:

docker run -d --gpus all --name ollama-gpu -p 11434:11434 -v /home/user/ollama:/root/.ollama ollama/ollama

Esto te da acceso directo a los archivos en el sistema host, lo que resulta práctico para copias de seguridad e inspección.

Paso 5: docker-compose.yml

Para configuraciones reproducibles, docker-compose es la opción recomendada. Describes el contenedor en un archivo YAML e inicias todo con un único comando.

Crea un archivo llamado docker-compose.yml:

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama-data:/root/.ollama
    restart: unless-stopped
    # Para soporte GPU, descomenta las siguientes líneas:
    # deploy:
    #   resources:
    #     reservations:
    #       devices:
    #         - driver: nvidia
    #           count: all
    #           capabilities: [gpu]

volumes:
  ollama-data:

Inicia el contenedor con:

docker compose up -d

Para detener y eliminar, usa:

docker compose down

El volumen ollama-data se conserva en este caso. Si también quieres eliminarlo, usa docker compose down -v.

Para soporte GPU, descomenta las entradas en deploy. En versiones antiguas de Docker, puedes usar runtime: nvidia en su lugar, aunque esto ahora se considera obsoleto.

Paso 6: Cargar modelo en el contenedor

Una vez que el contenedor está en ejecución, carga un modelo en él. Para ello, usa docker exec para ejecutar un comando dentro del contenedor en funcionamiento:

docker exec -it ollama ollama pull llama3

Luego inicia el modelo:

docker exec -it ollama ollama run llama3

El chat interactivo se abre directamente en la terminal. Usa /bye para terminar la sesión.

Como has vinculado un volumen, el modelo se conserva incluso si reinicas el contenedor. No tendrás que descargarlo de nuevo.

Paso 7: Acceder a la API desde el exterior

El parámetro -p 11434:11434 en tu comando docker run o la entrada ports en docker-compose garantizan que la API de Ollama sea accesible desde el sistema host. Por defecto, Ollama escucha en 0.0.0.0:11434 dentro del contenedor.

Prueba la conexión desde el host:

curl http://localhost:11434/

Si quieres acceder a Ollama desde otros dispositivos en la red, vincula el puerto a la dirección IP de red de tu host. En docker-compose se vería así:

ports:
  - "0.0.0.0:11434:11434"

Ten en cuenta las reglas de firewall y la autenticación. Encontrarás más detalles sobre acceso seguro a la red en el artículo Ollama Netzwerkzugriff.

Docker en Windows y macOS

En Windows y macOS usas Docker Desktop. Incluye una interfaz gráfica y el backend WSL2 en Windows. Puedes ejecutar los mismos comandos docker run y archivos docker-compose que en Linux.

En Windows con el backend WSL2, el soporte GPU funciona si tienes una GPU Nvidia y los controladores WSL2-GPU instalados. El comando del contenedor sigue siendo idéntico:

docker run -d --gpus all --name ollama -p 11434:11434 -v ollama-data:/root/.ollama ollama/ollama

En macOS con Apple Silicon, Docker Desktop utiliza automáticamente aceleración Metal. El parámetro --gpus all no es necesario en macOS y puede ignorarse. Las GPU de Apple se proporcionan a través del sistema host, no a través del NVIDIA Container Toolkit.

Una limitación en Windows y macOS es que Docker se ejecuta en una máquina virtual, lo que puede causar una ligera pérdida de rendimiento. Para máximo rendimiento en un servidor dedicado, Linux nativo es la mejor opción.

Problemas comunes con Ollama en Docker

La GPU no se reconoce en el contenedor. A menudo falta el NVIDIA Container Toolkit o la runtime de Docker no se ha reconfigurado. Verifica con nvidia-smi en el host y con docker exec -it ollama nvidia-smi en el contenedor.

Los modelos desaparecen después del reinicio. No has vinculado un volumen. Sin -v, Ollama almacena los modelos solo en el sistema de archivos del contenedor, que se pierde cuando eliminas el contenedor.

El puerto 11434 ya está en uso. Si Ollama ya está instalado directamente en el host, utiliza el mismo puerto. Detén el servicio Ollama local o mapea el contenedor a un puerto diferente, por ejemplo -p 11435:11434.

El contenedor no inicia después de actualizar la imagen. Si descarga una imagen nueva sin eliminar el contenedor antiguo, seguirá ejecutándose la versión anterior. Detén el contenedor, elimínalo e inicia uno nuevo. El volumen protege tus modelos.

OOM-Killer termina el contenedor. Los modelos grandes requieren mucha RAM. Si el host no tiene suficiente memoria, el kernel de Linux elimina el contenedor. Revisa el consumo de RAM con docker stats y elige un modelo más pequeño o agrega más RAM.

docker-compose ignora la configuración de GPU. En versiones más recientes de Docker, runtime: nvidia ya no funciona. Usa en su lugar el bloque deploy.resources.reservations.devices como se muestra en el ejemplo anterior.

El firewall bloquea el puerto 11434. Si quieres acceder a Ollama desde otra máquina, asegúrate de que el firewall del host permita el puerto 11434. En Ubuntu con UFW usa sudo ufw allow 11434.

Hardware, costos y seguridad con Ollama en Docker

Los requisitos de hardware dependen del modelo que quieras ejecutar. Un modelo de 7B como Llama 3 se ejecuta con 8 GB de RAM, idealmente con una GPU que tenga al menos 6 GB de VRAM. Los modelos más grandes, como Llama 3 70B, requieren significativamente más recursos. Encontrarás más detalles en los artículos CPU vs. GPU y LLM lokal betreiben.

Los costos provienen del hardware mismo. Ollama y Docker son gratuitos y de código abierto. No hay tarifas de licencia ni costos de API siempre que operes localmente.

En cuanto a seguridad, no debes exponer el puerto 11434 sin protección a Internet. Usa un proxy inverso con autenticación si quieres hacer que Ollama sea accesible de forma remota. Los detalles se encuentran en el artículo Ollama Netzwerkzugriff. En Docker también puedes usar aislamiento de red definiendo una red Docker propia y exponiendo solo los puertos necesarios.

Enlaces adicionales e información sobre Ollama con Docker

FAQ: Ollama con Docker - Preguntas frecuentes

¿Necesito Docker para usar Ollama?

No. Ollama se puede instalar directamente en Linux, macOS y Windows. Docker es opcional y resulta especialmente útil en servidores, NAS y entornos aislados.

¿Funciona Ollama en Docker sin GPU?

Sí. Sin el parámetro --gpus all, Ollama se ejecuta en CPU. Es más lento, pero suficiente para modelos pequeños y pruebas.

¿Dónde almacena Docker los modelos de Ollama?

Dentro del contenedor en /root/.ollama. Si montas un volumen, los modelos se guardan en él y persisten cuando eliminas el contenedor.

¿Cómo actualizo Ollama en Docker?

Descarga la última imagen con docker pull ollama/ollama, detén el contenedor en ejecución, elimínalo e inicia uno nuevo. El volumen protege tus modelos y configuración.

¿Puedo ejecutar varios contenedores de Ollama simultáneamente?

Sí. Asigna a cada contenedor un nombre propio y un puerto distinto, por ejemplo -p 11435:11434 para el segundo contenedor. Usa volúmenes separados si los contenedores necesitan alojar modelos diferentes.

¿Cómo uso Ollama con Docker en un NAS Synology?

Synology proporciona una interfaz gráfica de Docker en Container Manager. Puedes cargar la imagen ollama/ollama allí y configurarla con los mismos parámetros que en la terminal. Asegúrate de contar con RAM y potencia de CPU suficientes.

¿Cuál es la diferencia entre volúmenes nombrados y Bind Mounts?

Docker administra los volúmenes nombrados y se almacenan en el directorio de datos de Docker. Los Bind Mounts enlazan cualquier directorio del host y te dan acceso directo a los archivos. Ambos garantizan persistencia.

¿Funciona el soporte de GPU en Windows con Docker Desktop?

Sí, con WSL2 backend y los drivers Nvidia correctos. El parámetro --gpus all funciona igual que en Linux. En macOS con Apple Silicon, la GPU se utiliza automáticamente vía Metal.

¿Puedo ejecutar Open WebUI junto con Ollama en Docker?

Sí. Define ambos servicios en un docker-compose.yml y conéctalos a través de una red Docker compartida. Open WebUI accede entonces al contenedor de Ollama usando el nombre del contenedor.

¿Cómo me aseguro de que Ollama se inicie automáticamente después de un reinicio?

Usa restart: unless-stopped en docker-compose o el parámetro --restart unless-stopped en docker run. Docker iniciará el contenedor automáticamente cuando el servicio de Docker se levante.

¿Puedo ejecutar Ollama en Docker con Podman?

Sí. Podman es ampliamente compatible con comandos Docker y docker-compose. La sintaxis para volúmenes y puertos es idéntica. Para soporte de GPU, usa --device nvidia.com/gpu=all en Podman.

Fuentes y lecturas complementarias

  • Repositorio de Ollama en Docker Hub
  • Documentación oficial de Ollama
  • Documentación de Docker sobre volúmenes y Port Mapping
  • Guía de instalación de NVIDIA Container Toolkit
  • Especificación de Docker Compose
Volver al blog
Share:

Nächster Artikel in IA local

Weiterlesen
Ejecutar LLM localmente

Entradas relacionadas