¿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
(conX
lo más bajo posible, con un mínimo de6m
)--memory-swappiness 0
--cpus=X
(conX
como algo como0.00001
) ¿Cuál es la cantidad máxima de0
aquí?--blkio-weight=X
(conX
lo más bajo posible, con un mínimo de10
) ¿O debería ser lo más alto posible?--device-read-bps=X:0mb
(conX
como un dispositivo en el host, por ejemplo,/dev/sda
)--device-write-bps=X:0mb
(conX
como un dispositivo en el host, por ejemplo,/dev/sda
)--expose=0
--gpus=0
--oom-score-adj=X
(conX
lo más bajo posible, con un mínimo de-1000
) ¿O debería ser lo más alto posible con un máximo de1000
?--pids-limit=X
(conX
lo más bajo posible pero con un mínimo de1
para que pueda ejecutar “algo”)--read-only
--shm-size=Xb
(conX
lo más bajo posible, con un mínimo de1
)--cap-drop=X
(No tengo idea de qué puede ser utilizado comoX
aquí…)- El acceso a la red debería ser bloqueado con
iptables
en el host en lugar de una opción dedocker 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)
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
(conX
lo más bajo posible, con un mínimo de6m
): 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
(conX
como algo como0.00001
): Esta opción limita la cantidad de CPUs que el contenedor puede utilizar. La cantidad máxima de0
que se puede utilizar aquí depende de la cantidad de CPUs disponibles en el host.--blkio-weight=X
(conX
lo más bajo posible, con un mínimo de10
): 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
(conX
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
(conX
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
(conX
lo más bajo posible, pero con un mínimo de1
): 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
(conX
lo más bajo posible, con un mínimo de1
): 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
(conX
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.iptables
en el host en lugar de utilizar una opción dedocker 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 coniptables
en el host.