es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo limitar los recursos de un contenedor (docker)?

Supongamos que deseas asegurarte de que un contenedor utilice la menor cantidad de recursos posible, de manera que no afecte al host sin importar lo que ocurra.

(No me importa si el contenedor se bloquea debido a la cantidad limitada de recursos).

Estas son las opciones posibles de docker run que ya he encontrado. ¿Tengo opciones adicionales? ¿Algunas de ellas están erróneas?

  • --memory=Xm (con X lo más bajo posible, con un mínimo de 6m)
  • --memory-swappiness 0
  • --cpus=X (con X como algo como 0.00001) ¿Cuál es la cantidad máxima de 0 aquí?
  • --blkio-weight=X (con X lo más bajo posible, con un mínimo de 10) ¿O debería ser lo más alto posible?
  • --device-read-bps=X:0mb (con X como un dispositivo en el host, por ejemplo, /dev/sda)
  • --device-write-bps=X:0mb (con X como un dispositivo en el host, por ejemplo, /dev/sda)
  • --expose=0
  • --gpus=0
  • --oom-score-adj=X (con X lo más bajo posible, con un mínimo de -1000) ¿O debería ser lo más alto posible con un máximo de 1000?
  • --pids-limit=X (con X lo más bajo posible pero con un mínimo de 1 para que pueda ejecutar “algo”)
  • --read-only
  • --shm-size=Xb (con X lo más bajo posible, con un mínimo de 1)
  • --cap-drop=X (No tengo idea de qué puede ser utilizado como X aquí…)
  • El acceso a la red debería ser bloqueado con iptables en el host en lugar de una opción de docker run

(Salto las opciones que están implícitas en otras opciones de esta lista)

Sorprendentemente, no pude encontrar nada sobre el tráfico de la red… ¿Se puede hacer esto con --device-read-bps=X:0mb y --device-read-bps=X:0mb? Y si es así, ¿qué es X? (No parece tener algo como /dev/eth0 en mi host para representar mi dispositivo de red)

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en Docker, seguridad, recursos, límites y estabilidad, existen varias opciones que se pueden utilizar para asegurar que un contenedor utilice la menor cantidad de recursos posible sin afectar al host. Las siguientes opciones de docker run se pueden utilizar:

    • --memory=Xm (con X lo más bajo posible, con un mínimo de 6m): Esta opción establece un límite de memoria para el contenedor. Se recomienda establecerlo en el valor más bajo posible sin que el contenedor se bloquee.
    • --memory-swappiness 0: Esta opción evita que el contenedor intercambie memoria con el disco, lo cual puede causar problemas de rendimiento para el host.
    • --cpus=X (con X como algo como 0.00001): Esta opción limita la cantidad de CPUs que el contenedor puede utilizar. La cantidad máxima de 0 que se puede utilizar aquí depende de la cantidad de CPUs disponibles en el host.
    • --blkio-weight=X (con X lo más bajo posible, con un mínimo de 10): Esta opción establece un peso relativo para el acceso al bloque de E/S, lo cual afecta el acceso al disco. Un valor más bajo significa que el contenedor tendrá menos acceso al disco.
    • --device-read-bps=X:0mb y --device-write-bps=X:0mb (con X como un dispositivo en el host): Estas opciones limitan la cantidad de datos que se pueden leer o escribir en el dispositivo especificado en el host. Sin embargo, no está claro si se pueden utilizar para limitar el tráfico de red, ya que no existe un dispositivo que represente dispositivos de red como /dev/eth0.
    • --expose=0: Esta opción evita que el contenedor exponga puertos al host, lo cual puede reducir la superficie de ataque para el host.
    • --gpus=0: Esta opción evita que el contenedor acceda a la GPU del host, lo cual puede utilizar recursos significativos.
    • --oom-score-adj=X (con X lo más bajo posible, con un mínimo de -1000): Esta opción establece el ajuste de puntuación de OOM (Out of Memory) del contenedor, lo cual afecta la probabilidad de que el contenedor sea terminado por el OOM killer del host. Un valor más bajo significa que es menos probable que el contenedor sea terminado.
    • --pids-limit=X (con X lo más bajo posible, pero con un mínimo de 1): Esta opción establece un límite en la cantidad de procesos que el contenedor puede ejecutar. Un valor más bajo significa que el contenedor puede ejecutar menos procesos.
    • --read-only: Esta opción monta el sistema de archivos del contenedor como de solo lectura, lo cual evita que los cambios en el sistema de archivos se persistan.
    • --shm-size=Xb (con X lo más bajo posible, con un mínimo de 1): Esta opción establece el tamaño de memoria compartida del contenedor, lo cual afecta la cantidad de memoria compartida que el contenedor puede utilizar. Un valor más bajo significa que el contenedor puede utilizar menos memoria compartida.
    • --cap-drop=X (con X como una capacidad): Esta opción elimina capacidades específicas de Linux del contenedor, lo cual puede evitar que el contenedor realice ciertas acciones privilegiadas.
    • El acceso a la red debe bloquearse con iptables en el host en lugar de utilizar una opción de docker run.

    En resumen, para minimizar el uso de recursos del contenedor mientras se minimiza el impacto en el host, establezca un límite de memoria bajo con --memory=Xm, evite el intercambio de memoria con --memory-swappiness 0, establezca un límite bajo de CPU con --cpus=X, establezca un peso bajo de bloques de E/S con --blkio-weight=X, evite que se expongan puertos con --expose=0, evite el acceso a la GPU del host con --gpus=0, establezca un ajuste bajo de la puntuación de OOM con --oom-score-adj=X, establezca un límite bajo de procesos con --pids-limit=X, monte el sistema de archivos del contenedor como solo lectura con --read-only, establezca un tamaño bajo de memoria compartida con --shm-size=Xb, elimine capacidades de Linux con --cap-drop=X y bloquee el acceso a la red con iptables en el host.

Comments are closed.