Sobes.tech
Middle

Como é que a limitação de recursos é feita no Docker?

sobes.tech IA

Resposta da IA

A limitação de recursos no Docker é implementada através de namespaces e control groups (cgroups) do núcleo Linux. Os namespaces isolam os recursos do sistema, enquanto os cgroups limitam, contabilizam e isolam o uso de recursos para grupos de processos.

Parâmetros-chave para limitar recursos:

  • CPU:
    • --cpu-shares: Valor ponderado para distribuir CPU entre os contêineres quando está limitado. Valor padrão 1024.
    • --cpu-quota: Quantidade máxima de tempo de CPU (em microsegundos) para usar durante o período (--cpu-period). Por padrão 100000.
    • --cpu-period: Período de tempo de CPU (em microsegundos) para --cpu-quota.
    • --cpuset-cpus: Indica quais núcleos de CPU podem usar os contêineres.
  • Memória:
    • --memory: Limite rígido de memória RAM. Se o contêiner o exceder, pode ser finalizado.
    • --memory-swap: Limite rígido na soma de memória RAM e swap.
    • --memory-reservation: Limite suave de memória RAM. Quando se limitam recursos, os contêineres com menor reserva serão deslocados primeiro para o swap do que aqueles com maior memory-reservation.
    • --kernel-memory: Limite de memória do núcleo.
    • --memswap-swappiness: Quão disposto está o núcleo a usar swap para este contêiner (de 0 a 100). 0 - muito pouco disposto, 100 - muito disposto.
  • Entrada/Saída de blocos:
    • --blkio-weight: Valor ponderado para distribuir I/O entre os contêineres.
    • --blkio-weight-device: Valor ponderado para um dispositivo de bloco específico.
    • --device-read-bps: Limite na velocidade de leitura do dispositivo (bytes por segundo).
    • --device-write-bps: Limite na velocidade de escrita no dispositivo (bytes por segundo).
    • --device-read-iops: Limite no número de operações de leitura do dispositivo (operações por segundo).
    • --device-write-iops: Limite no número de operações de escrita no dispositivo (operações por segundo).
  • Rede:
    • A limitação de recursos de rede diretamente através das flags docker run é limitada. Normalmente, usam-se ferramentas externas, como tc (controle de tráfego), netem ou ferramentas de orquestração (Kubernetes NetworkPolicy).

Exemplos de uso:

# Executar um contêiner com limitação de CPU Shares e memória
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity

# Executar um contêiner com limite rígido de CPU Quota e Memória
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity

O Docker converte essas flags em configurações cgroups correspondentes para o grupo de processos iniciado dentro do contêiner. Essas configurações são gerenciadas através do sistema de arquivos virtual /sys/fs/cgroup dentro do contêiner (quando montado) e no sistema host.