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 maiormemory-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, comotc(controle de tráfego), netem ou ferramentas de orquestração (Kubernetes NetworkPolicy).
- A limitação de recursos de rede diretamente através das flags
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.