Sobes.tech
Middle

¿Cómo se limita el uso de recursos en Docker?

sobes.tech AI

Respuesta de la IA

La limitación de recursos en Docker se implementa a través de namespaces y control groups (cgroups) del núcleo Linux. Los namespaces aíslan los recursos del sistema, y los cgroups limitan, contabilizan y aíslan el uso de recursos para grupos de procesos.

Parámetros clave para limitar recursos:

  • CPU:
    • --cpu-shares: Valor ponderado para distribuir CPU entre contenedores cuando está limitado. Valor predeterminado 1024.
    • --cpu-quota: Cantidad máxima de tiempo de CPU (en microsegundos) para usar durante el período (--cpu-period). Por defecto 100000.
    • --cpu-period: Período de tiempo de CPU (en microsegundos) para --cpu-quota.
    • --cpuset-cpus: Indica qué núcleos de CPU pueden usar los contenedores.
  • Memoria:
    • --memory: Límite rígido de memoria RAM. Si el contenedor lo excede, puede ser finalizado.
    • --memory-swap: Límite rígido en la suma de memoria RAM y swap.
    • --memory-reservation: Límite suave de memoria RAM. Cuando se limitan recursos, los contenedores con menor reserva serán desplazados primero al swap que aquellos con mayor memory-reservation.
    • --kernel-memory: Límite de memoria del núcleo.
    • --memswap-swappiness: Qué tan dispuesto está el núcleo a usar swap para este contenedor (de 0 a 100). 0 - muy poco dispuesto, 100 - muy dispuesto.
  • Entrada/Salida de bloques:
    • --blkio-weight: Valor ponderado para distribuir I/O entre contenedores.
    • --blkio-weight-device: Valor ponderado para un dispositivo de bloque específico.
    • --device-read-bps: Límite en la velocidad de lectura del dispositivo (bytes por segundo).
    • --device-write-bps: Límite en la velocidad de escritura en el dispositivo (bytes por segundo).
    • --device-read-iops: Límite en el número de operaciones de lectura del dispositivo (operaciones por segundo).
    • --device-write-iops: Límite en el número de operaciones de escritura en el dispositivo (operaciones por segundo).
  • Red:
    • La limitación de recursos de red directamente a través de las banderas docker run está limitada. Normalmente, se utilizan herramientas externas, como tc (control de tráfico), netem o herramientas de orquestación (Kubernetes NetworkPolicy).

Ejemplos de uso:

# Ejecutar un contenedor con limitación de CPU Shares y memoria
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity

# Ejecutar un contenedor con límite rígido de CPU Quota y Memoria
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity

Docker convierte estas banderas en configuraciones cgroups correspondientes para el grupo de procesos que se ejecuta dentro del contenedor. Estas configuraciones se gestionan a través del sistema de archivos virtual /sys/fs/cgroup dentro del contenedor (al montarlo) y en el sistema host.