CodeGym /Cursos /Docker SELF /Gestión de recursos de contenedores

Gestión de recursos de contenedores

Docker SELF
Nivel 12 , Lección 0
Disponible

6.1 Razones para limitar los recursos de los contenedores

Docker maneja muy bien la gestión de recursos de los contenedores, lo que permite distribuir eficazmente la potencia del sistema y evitar conflictos innecesarios entre contenedores. Esto es especialmente importante para que una aplicación en un contenedor no "devore" todos los recursos y ralentice el funcionamiento de otros servicios. Limitar recursos como el procesador (CPU) y la memoria ayuda a evitar sobrecargas, mantener la estabilidad del sistema y garantizar que todas las aplicaciones funcionen de manera predecible. En esta clase vamos a analizar cómo establecer límites en el uso de CPU y memoria para que el sistema siga siendo productivo incluso con una alta carga de trabajo.

Por qué es importante limitar los recursos de los contenedores:

  1. estabilidad: prevenir la situación en la que un contenedor tome todos los recursos, haciendo que otros contenedores o el propio sistema empiecen a ralentizarse.
  2. eficiencia: una mejor distribución de los recursos entre los contenedores para aprovechar al máximo la potencia del sistema.
  3. protección: limitar los recursos ayuda a evitar problemas con los contenedores que podrían, accidental o intencionalmente, sobrecargar el sistema.

6.2 Límites para el uso de CPU

Docker ofrece varias formas de limitar el uso del CPU por los contenedores.

¡Importante! Aquí por CPU nos referimos a un núcleo del procesador, no al procesador completo. Un procesador de cuatro núcleos tendrá 4 CPU.

1. Limitación de la cuota de CPU (--cpu-shares)

El parámetro --cpu-shares establece un valor relativo de prioridad en el uso del CPU por el contenedor. El valor por defecto es 1024. Este valor es relativo, lo que significa que un contenedor con --cpu-shares=512 tendrá la mitad de la prioridad de un contenedor con --cpu-shares=1024.

Ejemplo de uso:

En este ejemplo, el contenedor high_priority_container tendrá una prioridad más alta en la asignación de CPU que low_priority_container.

Terminal

docker run -d --name low_priority_container --cpu-shares=512 nginx

docker run -d --name high_priority_container --cpu-shares=2048 nginx

2. Limitación de la cantidad de CPU (--cpus)

El parámetro --cpus establece la cantidad exacta de CPU disponible para el contenedor. Por ejemplo, un valor de 1.5 significa que el contenedor puede usar 1.5 CPU.

Ejemplo de uso:

Este ejemplo limita el contenedor limited_cpu_container a usar no más de 1.5 CPU.

Terminal


        docker run -d --name limited_cpu_container --cpus="1.5" nginx
    

3. Limitación del tiempo de uso de CPU (--cpu-quota y --cpu-period)

Los parámetros --cpu-quota y --cpu-period permiten configurar más finamente el uso del CPU. --cpu-period establece un intervalo de tiempo en microsegundos (por defecto 100000), mientras que --cpu-quota establece el tiempo máximo permitido para usar el CPU durante ese período.

Ejemplo de uso:

En este ejemplo, el contenedor custom_cpu_quota_container usará no más del 50% del CPU (25000/50000).

Terminal


        docker run -d --name custom_cpu_quota_container --cpu-period=50000 --cpu-quota=25000 nginx

6.3 Límites en el uso de memoria

Limitar la memoria permite controlar cuánta memoria RAM puede usar un contenedor. Esto ayuda a evitar situaciones donde un contenedor comienza a "consumir" toda la memoria, afectando otros procesos y contenedores.

1. Límites de uso máximo de memoria (--memory)

El parámetro --memory establece el límite superior de memoria que puede usar el contenedor. Si el contenedor excede este límite, el sistema lo finalizará.

Ejemplo de uso:

Este ejemplo limita al contenedor limited_memory_container a no usar más de 512 MB de memoria RAM.

Terminal

docker run -d --name limited_memory_container --memory="512m" nginx

2. Límites de memoria swap (--memory-swap)

El parámetro --memory-swap establece el límite total para la memoria RAM y el swap. Por ejemplo, si --memory está configurado en 512 MB y --memory-swap en 1 GB, el contenedor podrá usar hasta 512 MB de RAM y otros 512 MB de swap.

Ejemplo de uso:

Este ejemplo limita al contenedor swap_limited_container a usar 512 MB de RAM y 512 MB de swap.

Terminal

docker run -d --name swap_limited_container --memory="512m" --memory-swap="1g" nginx

3. Límites de uso de memoria sin swap (--memory-swap=-1)

Para prohibir el uso de swap, establece el parámetro --memory-swap en -1.

Ejemplo de uso:

Este ejemplo limita al contenedor no_swap_container a 512 MB de RAM sin posibilidad de usar swap.

Terminal

docker run -d --name no_swap_container --memory="512m" --memory-swap="-1" nginx

6.4 Escenarios prácticos

1. Lanzamiento de tareas de alta y baja prioridad

Si en un servidor se ejecutan tanto tareas importantes como secundarias, el parámetro --cpu-shares ayuda a distribuir los recursos para que las tareas críticamente importantes obtengan más CPU.

Terminal

docker run -d --name high_priority_task --cpu-shares=2048 my_high_priority_image
docker run -d --name low_priority_task --cpu-shares=512 my_low_priority_image

2. Limitación de recursos para pruebas

Para probar aplicaciones en condiciones de recursos limitados, se pueden establecer límites estrictos en CPU y memoria. Esto ayuda a entender cómo funcionará la aplicación bajo estas restricciones.

Terminal

docker run -d --name test_container --cpus="1" --memory="256m" my_test_image

3. Protección contra el agotamiento de recursos

Para evitar que un contenedor use todos los recursos disponibles del sistema, se pueden establecer límites en memoria y CPU para todos los contenedores.

Terminal

docker run -d --name isolated_container --cpus="2" --memory="1g" my_app_image
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION