Si está pensando en ejecutar sus aplicaciones web en contenedores Docker, o si ya se ha adaptado a la tecnología, hay una de las consideraciones más importantes de las que preocuparse, que es la cantidad de recursos de host que utilizan sus contenedores.
De forma predeterminada, no hay límite en la cantidad de memoria o CPU que puede usar un contenedor. Puede usar tanto como lo permita el programador del kernel del host. Es importante que un contenedor en ejecución no consuma demasiada memoria o CPU en la computadora host. Cuando el kernel detecta que queda muy poca memoria libre, se activa una Excepción por falta de memoria y comienza a matar procesos, y esto puede llevar al cierre completo del sistema en algunos casos.
Para evitar estas circunstancias, siempre debe ejecutar pruebas en su aplicación y determinar la cantidad de recursos necesarios, y luego limitar los contenedores para usar una cantidad razonable de recursos.
Configuración de Ubuntu 18.04 para usar la función de limitación de recursos de Docker
Entonces empecemos. En primer lugar, debe verificar si su kernel permite estas funciones. Para hacer esto, necesita ejecutar el siguiente comando.
$ sudo docker info
Si recibe la siguiente advertencia al final de la salida, debe realizar algunos cambios en los archivos del sistema.
WARNING: Noswaplimitsupport
En ese caso, siga los pasos a continuación en Ubuntu 18.04
- Inicie sesión en el host de Ubuntu como usuario con privilegios de sudo.
- Edite el / etc / default / grub Archiva y agrega la siguiente línea.
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
- Después de agregar la línea anterior, guarde y cierre el archivo. También necesita actualizar GRUB con el siguiente comando.
$ sudo update-grub
Los cambios entran en vigor cuando se reinicia el sistema. Asegúrese de que los cambios surtieron efecto ejecutando el siguiente comando nuevamente
$ sudo dockerinfo
Si ya no ve la advertencia, está listo para comenzar.
Ahora hay dos tipos de recursos importantes de los que debemos ocuparnos.
- memoria
- Procesador central
Limitar el acceso a la memoria de un contenedor
Al iniciar un recipiente con Ejecución de Docker Comando podemos especificar varias opciones. Siguen los ejemplos.
Para limitar el uso de almacenamiento de un contenedor –Memoria Posibilidad. Se usa un número entero positivo seguido de un sufijo b, k, m, g. El siguiente comando ejecuta un contenedor de Ubuntu con la restricción de no usar más de 1 gigabyte de memoria.
$ sudo docker run -it --memory=”1g” ubuntu /bin/bash
Cómo limitar el uso de la memoria en un contenedor al uso del disco – Intercambio de memoria Posibilidad. También se usa un número entero positivo seguido de un sufijo b, k, m, g. El contenedor se puede utilizar en el siguiente caso
1 gigabyte de espacio no intercambiable y 1 gigabyte de espacio de intercambio. La cantidad total de espacio de intercambio permitido para un contenedor es la diferencia entre –memory-swap y –memory (2 g – 1 g). Si no desea que su contenedor use espacio de intercambio, configure tanto –memory como –memory-swap con los mismos valores.
$ sudo docker run -it --memory=”1g” --memory-swap=”2g” ubuntu /bin/bash
En caso de que Docker detecte memoria insuficiente en la computadora host y haya configurado – Reserva de memoria¿Su valor tendrá prioridad? –Memoria. Pero si no has contratado –Memoria Entonces, el uso de memoria del contenedor no está restringido. Solo tiene efecto cuando se detecta poca memoria. Es una especie de restricción suave.
$ sudo docker run -it --memory=”1g” --memory-reservation=”512m” ubuntu /bin/bash
Limitar el uso de CPU de un contenedor
Para limitar el tiempo de CPU de un contenedor, use –cpus posibilidad. Si establece el valor en “.5”, significa 50000 microsegundos de tiempo de CPU.
$ sudo docker run -it --cpus=".5" ubuntu /bin/bash
Para limitar los recursos compartidos de CPU de un contenedor, use – Acciones CPUS posibilidad. El valor predeterminado es 1024. Aumente o disminuya para permitir que un contenedor use más o menos porciones de los ciclos de CPU de las computadoras host. Esto es útil cuando la computadora host está restringiendo los ciclos de la CPU. De lo contrario, los contenedores pueden usar tantos ciclos de CPU como necesiten. Esto también es una especie de límite blando.
$ sudo docker run -it --cpus-shares="512" ubuntu /bin/bash
Conclusión
El límite de los recursos de un contenedor depende en gran medida de la configuración del kernel de la computadora host. Si bien es muy importante conocer los requisitos de su contenedor y limitarlos en consecuencia, también debe estar familiarizado con el entorno de las máquinas host, que en este caso es Ubuntu 18.04. Ejecute siempre varias pruebas en sus aplicaciones para tener una buena idea de los requisitos de recursos. El uso cuidadoso de los recursos puede ahorrar muchos costos.
Puede ver las estadísticas de sus contenedores Docker sobre la marcha haciendo esto Estadísticas de Docker Comando especificando el nombre o nombres del contenedor y revisando los límites y configuraciones que ha impuesto.
$ sudo docker stats ubuntu