A demanda por executar modelos de linguagem locais (Llama, DeepSeek, Qwen, Mistral) para garantir soberania de dados, privacidade e zero custos com tokens de API explodiu.

O Ollama tornou-se o padrão mais simples e eficiente para isso. No entanto, instalar o binário ou drivers CUDA diretamente no sistema operacional do servidor muitas vezes gera conflito de dependências, quebra de bibliotecas após atualizações do kernel (apt upgrade) ou dificuldades para isolar ambientes.

Neste guia, você vai ver como isolar toda a stack de inferência dentro do Docker utilizando o NVIDIA Container Toolkit, com alocação correta de VRAM e boas práticas de segurança de rede.

1. Configurando o NVIDIA Container Toolkit (Host)

Para que o daemon do Docker consiga passar as GPUs e capacidades de computação CUDA para os containers, o host (Debian/Ubuntu) precisa do runtime oficial da NVIDIA.

Execute no terminal:

# 1. Adicionar o repositório oficial da NVIDIA 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 # 2. Instalar o toolkit e configurar o Docker daemon sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker 

2. O compose.yaml com Aceleração de GPU

Crie um arquivo compose.yaml (ou docker-compose.yml) na pasta do seu projeto.

O ponto crucial está na diretiva deploy.resources.reservations.devices, onde definimos o driver nvidia e as capacidades necessárias (gpu, compute, utility):

services: ollama: image: ollama/ollama:latest container_name: ollama-gpu-server restart: unless-stopped ports: # Amarre ao localhost para não expor a API sem autenticação na rede externa! - "127.0.0.1:11434:11434" volumes: - ollama_models:/root/.ollama deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu, compute, utility] volumes: ollama_models: name: ollama_models_volume 

Suba o container em background:

docker compose up -d 

3. Validando se a GPU está ativa dentro do Container

Para confirmar se o container está de fato enxergando a GPU NVIDIA e o CUDA:

docker exec -it ollama-gpu-server nvidia-smi 

Se a saída do nvidia-smi exibir sua GPU (ex: RTX 3060, RTX 4060 Ti, A100, etc.), o passthrough foi configurado com sucesso!

4. Baixando e Testando Modelos

Você pode interagir diretamente com a CLI do Ollama dentro do container:

# Baixar e testar um modelo leve e rápido (ex: Llama 3.2 de 3B) docker exec -it ollama-gpu-server ollama run llama3.2:3b # Ou um modelo focado em código / raciocínio (ex: Qwen 2.5 Coder 7B) docker exec -it ollama-gpu-server ollama run qwen2.5-coder:7b 

Para listar os modelos que já estão persistidos no seu volume Docker:

docker exec -it ollama-gpu-server ollama list 

5. Dica Crítica de Segurança de Rede

⚠️ Atenção: Por padrão, a API REST do Ollama (http://localhost:11434/api/...) não implementa camada de autenticação.

Se você alterar a porta para 0.0.0.0:11434, qualquer usuário na mesma rede local (ou na internet, se houver IP público) poderá:

  • Submeter prompts e consumir 100% da sua VRAM e CPU;
  • Excluir modelos baixados via chamada DELETE;
  • Fazer download de modelos arbitrários no seu disco.

Como proteger em produção:

  1. Mantenha a porta amarrada estritamente em 127.0.0.1:11434 no Compose.
  2. Utilize um reverse proxy como Caddy ou Nginx com autenticação por cabeçalho (Authorization: Bearer <seu-token>) e terminação SSL/TLS se precisar expor para outros serviços.
  3. Se for para acesso remoto privado, utilize um túnel VPN moderno como Tailscale ou WireGuard.

Conclusão e Recursos

Rodar o Ollama via Docker Compose traz a tranquilidade de atualizar imagens sem medo de quebrar bibliotecas do sistema operacional, além de facilitar a réplica do ambiente em qualquer servidor.

Publiquei o guia completo com benchmarks de consumo de VRAM (8GB vs 12GB vs 16GB), dicas de dimensionamento de hardware e integrações no meu blog:

👉 Guia Completo: Ollama com Docker e GPU no Fymax Sentinel

Como você está rodando LLMs locais na sua infraestrutura hoje? Utiliza Docker, bare-metal ou soluções como vLLM/LocalAI? Deixe nos comentários!