Establecer quotas o máximos de uso de CPU, RAM y disco de un contenedor Docker
Uno de los errores más comunes al ejecutar contenedores, es no establecer quotas o límites de uso de recursos a los contenedores, ocasionando que eventualmente tomen más recursos de los disponibles o desestabilicen el servidor.
Establecer límites de uso de disco duro
El comando docker run
con la opción --storage-opt
para establecer diferentes opciones de almacenamiento para el contenedor. Por ejemplo, para establecer un límite de almacenamiento de 10 GB para un contenedor, puede usar el siguiente comando:
docker run --storage-opt size=10GB <nombre-de-la-imagen>
También puede usar la opción --storage-opt
para establecer límites en otros recursos de almacenamiento, como el número de archivos que se pueden almacenar en el contenedor o el tamaño máximo de un archivo individual. Para obtener más información sobre cómo establecer opciones de almacenamiento para un contenedor en Docker, consulte la documentación en el sitio web de Docker.
Establecer límites de uso de CPU y Memoria
Para establecer límites en el uso de CPU y memoria de un contenedor en Docker, puede usar el comando docker run
con las opciones --cpus
y --memory
, respectivamente. Por ejemplo, para establecer un límite de uso de CPU de 0,5 y un límite de memoria de 512 MB para un contenedor, puede usar el siguiente comando:
docker run --cpus 0.5 --memory 512MB <nombre-de-la-imagen>
También puede usar las opciones --cpu-shares
y --memory-swap
para establecer límites adicionales en el uso de CPU y memoria. Para obtener más información sobre cómo establecer límites en el uso de recursos de un contenedor en Docker, consulte la documentación en el sitio web de Docker.
A continuación se presentan algunos ejemplos adicionales de cómo establecer límites en el uso de recursos de un contenedor en Docker:
- Para establecer un límite de uso de CPU de 1 y un límite de memoria de 2 GB para un contenedor, puede usar el siguiente comando:
docker run --cpus 1 --memory 2GB <nombre-de-la-imagen>
- Para establecer un límite de uso de CPU de 0,25, un límite de memoria de 256 MB y un límite de almacenamiento de 5 GB para un contenedor, puede usar el siguiente comando:
docker run --cpus 0.25 --memory 256MB --storage-opt size=5GB <nombre-de-la-imagen>
- Para establecer un límite de uso de CPU de 0,5, un límite de memoria de 1 GB, un límite de almacenamiento de 10 GB y un límite en el número de archivos almacenados en el contenedor (500 archivos), puede usar el siguiente comando:
docker run --cpus 0.5 --memory 1GB --storage-opt size=10GB --storage-opt max-files=500 <nombre-de-la-imagen>
¿Qué puede pasar si no fijo límites?
Si excede los límites establecidos para un contenedor en Docker, puede provocar que el contenedor se detenga o se bloquee. Esto puede ocurrir si el contenedor intenta utilizar más recursos de los permitidos, como CPU, memoria o almacenamiento. Cuando esto sucede, el contenedor deja de responder y ya no se puede acceder a su contenido o funcionalidades.
Para evitar que esto suceda, es importante establecer límites adecuados en el uso de recursos de un contenedor en Docker. De esta manera, se asegura de que el contenedor no consume más recursos de los necesarios, lo que puede mejorar su rendimiento y estabilidad. También es recomendable supervisar el uso de recursos del contenedor en tiempo real, para poder detectar y solucionar cualquier problema que pueda surgir antes de que afecte su funcionamiento.
¿Cómo puedo monitorear el uso de recursos?
Para monitorear el uso de recursos de un contenedor en Docker, puede usar el comando docker stats
. Este comando muestra información en tiempo real sobre el uso de CPU, memoria, almacenamiento y otros recursos de uno o varios contenedores en ejecución. Para usar el comando docker stats
, sólo tiene que ejecutarlo en una terminal y proporcionar el nombre o el identificador de los contenedores que desea monitorear.
Por ejemplo, para monitorear el uso de recursos de un contenedor llamado my-container
, puede usar el siguiente comando:
docker stats my-container
Esto mostrará información en tiempo real sobre el uso de CPU, memoria, almacenamiento y otros recursos del contenedor my-container
. Si desea monitorear el uso de recursos de varios contenedores, simplemente proporcione los nombres o identificadores de todos los contenedores que desea monitorear. Por ejemplo:
docker stats my-container1 my-container2 my-container3
También puede usar la opción --no-stream
para mostrar la información del uso de recursos de manera estática, en lugar de actualizarse en tiempo real.
Cuando se ejecuta este comando, se muestra una tabla con información sobre el uso de CPU, memoria, almacenamiento y otros recursos de cada contenedor. La tabla incluye la siguiente información:
- El nombre o el identificador del contenedor.
- El uso de CPU en porcentaje.
- El uso de memoria en bytes.
- El uso de almacenamiento en bytes.
- El número de archivos en el contenedor.
- El tamaño total de archivos en el contenedor.
Por ejemplo, si se ejecuta el comando docker stats
para supervisar el uso de recursos de un contenedor llamado my-container
, se podría ver algo como lo siguiente:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
69e3f12cddcd my-container 0.12% 1.536MiB / 1.952GiB 0.08% 1.87kB / 0B 0B / 0B 1
La tabla muestra información sobre el uso de CPU, memoria, almacenamiento y otros recursos del contenedor my-container
. Si se supervisan varios contenedores, se mostrará una fila por cada contenedor.
Como dato adicional, también es posible sensar el uso de recursos de Docker en Prometheus y graficarlos en Grafana, pero esa es otra historia.
Si quieres aprender más sobre Docker, Docker Compose, Quotas y más cosas, te invito a nuestro curso de Docker para desarrolladores, donde aprender a utilizar Docker como un pro montando un entorno de desarrollo completo conformado por varios Microservicios mediante Docker Compose.