Otimização de Recursos no Docker Pi-hole: Gestão de Memória e CPU

Gerenciar a alocação de hardware em ambientes de conteinerização é crucial para manter a estabilidade do host. Quando o Pi-hole é executado via Docker sem restrições explícitas, processos internos do motor FTL (Faster Than Light) podem apresentar picos de consumo de memória ou processamento. Este guia técnico detalha como aplicar limites granulares e otimizar as configurações internas para garantir que o serviço opere com eficiência, mantendo o consumo de RAM abaixo de 200MB.

Configuração de Limites no Engine do Docker

O Docker permite definir restrições diretamente no runtime. Para o Pi-hole, é recomendável estabelecer um teto de memória ("hard limit") e uma reserva garantida ("soft limit").

Parâmetros Essenciais de Performance

Flag Docker Descrição Técnica Valor Sugerido
--memory Limite máximo de RAM perimtido ao container 256MB
--memory-reservation Garantia de memória em condições normais 128MB
--cpus Fração máxima de ciclos de CPU 0.5 (meio núcleo)

Exemplo de Configuração via Docker Compose

Ao utilizar o docker-compose.yml, as definições de recursos devem ser inseridas no escopo do serviço. Abaixo, uma estrutura otimizada:

services:
  pihole-dns:
    image: pihole/pihole:latest
    container_name: dns_server
    mem_limit: 300M
    mem_reservation: 150M
    cpus: 0.5
    environment:
      - TZ=America/Sao_Paulo
      - FTLCONF_db_memory=64m
      - FTLCONF_maxlogage=1.0
    restart: always

Otimização do Motor FTL e Banco de Dados

O pihole-FTL é o binário responsável pela resolução DNS e processamento de estatísticas. O ajuste de suas variáveis de ambiente reduz drasticamente a pressão sobre a memória volátil.

Variáveis de Ambiente para Controle de Memória

  • FTLCONF_db_memory: Define o tamanho máximo do banco de dados em memória para as estatísticas de longo prazo. Reduzir para 50m ou 64m ajuda em sistemas com pouca RAM.
  • FTLCONF_maxlogage: Controla por quantas horas os logs de consultas permanecem carregados. O valor padrão de 24 horas pode ser reduzido (ex: 12 ou 1.0) para limpar o cache mais rapidamente.
  • FTLCONF_rates_limit: Ativa a proteção contra inundações de consultas, evitando que um cliente mal configurado cause picos de 100% de CPU.

Para aplicar via linha de comando:

docker run -d \
  --name pihole_servico \
  -e FTLCONF_db_memory=48m \
  -e FTLCONF_maxlogage=0.5 \
  --memory="256m" \
  pihole/pihole:latest

Estratégias de Logs e Escrita em Disco

O excesso de I/O de disco pode elevar a carga do sistema (Load Average). O Pi-hole rotaciona logs automaticamente, mas em containers, podemos ajustar a agressividade desse processo.

Dentro do container, o script de inicialização manipula o crontab para gerenciar a manutenção do sistema. Se necessário, a frequência de rotação pode ser aumentada para evitar arquivos de log extensos que demandam mais processamento durante a leitura da interface web.

Monitoramento e Diagnóstico de Performance

Após aplicar as restrições, é fundamental validar se o container está operando dentro das métricas esperadas sem entrar em "OOM Kill" (Out of Memory).

Comandos de Inspeção em Tempo Real

Para verificar o consumo atual de todos os containers ativos:

docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"

Para investigar processos internos específicos que estejam consumindo CPU dentro do container Pi-hole:

docker exec -it dns_server top -b -n 1

Análise de Logs do FTL

Se notar lentidão na resolução DNS, verifique se o FTL está atingindo limites internos:

docker exec -it dns_server tail -f /var/log/pihole/FTL.log

Configurações bem ajustadas resultam tipicamente em um tempo de resposta DNS inferior a 15ms e uma carga de CPU que raramente excede 3% em hardware moderno ou dispositivos como Raspberry Pi.

Tags: Docker Pi-hole DNS devops Performance-Tuning

Publicado em 6-22 17:57