Cómo usar el comando docker container stats para monitorear recursos de contenedores

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás a monitorear eficazmente el uso de recursos de tus contenedores Docker utilizando el comando docker stats. Explorarás cómo mostrar el uso de recursos en tiempo real para todos los contenedores en ejecución, así como para contenedores específicos por nombre o ID.

Además, descubrirás cómo ver el uso de recursos para todos los contenedores, incluidos los detenidos, y cómo personalizar el formato de salida del comando docker stats utilizando una plantilla personalizada. Finalmente, aprenderás a obtener una instantánea única de las estadísticas del contenedor sin transmisión continua.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/top("Display Running Processes in Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ps -.-> lab-555123{{"Cómo usar el comando docker container stats para monitorear recursos de contenedores"}} docker/stop -.-> lab-555123{{"Cómo usar el comando docker container stats para monitorear recursos de contenedores"}} docker/top -.-> lab-555123{{"Cómo usar el comando docker container stats para monitorear recursos de contenedores"}} docker/pull -.-> lab-555123{{"Cómo usar el comando docker container stats para monitorear recursos de contenedores"}} end

Mostrar el uso de recursos en tiempo real para todos los contenedores en ejecución

En este paso, aprenderás cómo mostrar el uso de recursos en tiempo real para todos los contenedores Docker en ejecución utilizando el comando docker stats. Este comando proporciona un flujo de datos en tiempo real sobre el uso de recursos de los contenedores, incluyendo CPU, memoria, E/S de red y E/S de bloques.

Primero, iniciemos algunos contenedores para tener algo que monitorear. Usaremos la imagen ubuntu y los ejecutaremos en modo desacoplado (-d) para que se ejecuten en segundo plano. También les asignaremos nombres para facilitar su identificación.

docker pull ubuntu
docker run -d --name container1 ubuntu sleep infinity
docker run -d --name container2 ubuntu sleep infinity
docker run -d --name container3 ubuntu sleep infinity

Ahora que tenemos algunos contenedores en ejecución, podemos usar el comando docker stats para ver su uso de recursos.

docker stats

Verás una tabla con información sobre cada contenedor en ejecución, incluyendo su ID, nombre, uso de CPU, uso de memoria, E/S de red, E/S de bloques y PIDs. Esta salida se actualiza en tiempo real.

Para detener el comando docker stats, presiona Ctrl+C.

Mostrar el uso de recursos en tiempo real para contenedores específicos por nombre o ID

En el paso anterior, aprendiste cómo mostrar el uso de recursos para todos los contenedores en ejecución. En este paso, aprenderás cómo mostrar el uso de recursos para contenedores específicos proporcionando sus nombres o IDs al comando docker stats.

Para mostrar las estadísticas de un solo contenedor, simplemente proporciona su nombre o ID después del comando docker stats. Por ejemplo, para ver las estadísticas de container1:

docker stats container1

Verás el uso de recursos en tiempo real solo para container1. Presiona Ctrl+C para detener la salida.

También puedes especificar múltiples nombres o IDs de contenedores para ver las estadísticas de varios contenedores simultáneamente. Por ejemplo, para ver las estadísticas de container1 y container2:

docker stats container1 container2

Esto mostrará el uso de recursos en tiempo real tanto para container1 como para container2. Presiona Ctrl+C para detener la salida.

Usar nombres de contenedores generalmente es más fácil de recordar y trabajar que los IDs de contenedores, especialmente cuando tienes múltiples contenedores en ejecución.

Mostrar el uso de recursos para todos los contenedores (en ejecución y detenidos)

Por defecto, docker stats solo muestra estadísticas para contenedores en ejecución. En este paso, aprenderás cómo mostrar el uso de recursos para todos los contenedores, incluyendo aquellos que están detenidos, usando la bandera -a o --all.

Primero, detengamos uno de los contenedores que iniciamos en los pasos anteriores.

docker stop container3

Ahora, si ejecutas docker stats sin banderas, solo verás container1 y container2 ya que siguen en ejecución.

docker stats

Presiona Ctrl+C para detener la salida.

Para ver las estadísticas de todos los contenedores, incluyendo el detenido container3, usa la bandera -a:

docker stats -a

Ahora verás listados container1, container2 y container3. Para los contenedores detenidos, la mayoría de los campos de uso de recursos mostrarán 0% o 0B, ya que no están consumiendo recursos activamente.

Esto es útil para obtener una visión completa de todos los contenedores en tu sistema y su último uso de recursos conocido antes de ser detenidos.

Formatear la salida de estadísticas de contenedores usando una plantilla personalizada

En este paso, aprenderás cómo formatear la salida del comando docker stats utilizando una plantilla personalizada de Go. Esto te permite mostrar solo la información que necesitas y en un formato fácil de leer o analizar.

El comando docker stats soporta la bandera --format, que acepta una cadena de plantilla Go como argumento. Puedes usar varios marcadores de posición dentro de la plantilla para representar diferentes datos del contenedor. Algunos marcadores comunes incluyen:

  • .ContainerID: El ID del contenedor
  • .Name: El nombre del contenedor
  • .CPUPerc: El porcentaje de uso de CPU
  • .MemUsage: El uso de memoria
  • .NetIO: La E/S de red
  • .BlockIO: La E/S de bloques
  • .PIDs: El número de PIDs

Probemos formatear la salida para mostrar solo el nombre del contenedor, uso de CPU y uso de memoria:

docker stats --format "{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

En este comando:

  • --format especifica que queremos usar un formato personalizado
  • "{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" es la cadena de plantilla Go
    • {{.Name}} muestra el nombre del contenedor
    • \t inserta un carácter de tabulación para separación
    • {{.CPUPerc}} muestra el porcentaje de uso de CPU
    • {{.MemUsage}} muestra el uso de memoria

Verás una transmisión en vivo del nombre del contenedor, uso de CPU y uso de memoria, separados por tabulaciones. Presiona Ctrl+C para detener la salida.

Puedes experimentar con diferentes marcadores y formatos para obtener la salida que necesites. Por ejemplo, para incluir el ID del contenedor y E/S de red:

docker stats --format "ID: {{.ContainerID}}\tName: {{.Name}}\tNetIO: {{.NetIO}}"

Esto proporciona una vista más personalizada de las estadísticas del contenedor.

Obtener una instantánea única de estadísticas de contenedores sin transmisión continua

Por defecto, docker stats proporciona una transmisión en vivo del uso de recursos. Sin embargo, a veces solo necesitas una instantánea única de las estadísticas actuales sin las actualizaciones continuas. En este paso, aprenderás cómo lograrlo usando la bandera --no-stream.

La bandera --no-stream indica a docker stats que recolecte las estadísticas una vez y luego finalice, en lugar de actualizar continuamente la salida.

Obtengamos una instantánea única de las estadísticas para todos los contenedores en ejecución:

docker stats --no-stream

Verás la tabla de estadísticas de contenedores aparecer una vez, y luego el comando finalizará. Esto es útil para scripting o cuando solo necesitas un vistazo rápido al uso actual de recursos.

Puedes combinar --no-stream con otras banderas, como -a para ver una instantánea de todos los contenedores (en ejecución y detenidos):

docker stats -a --no-stream

Esto mostrará una instantánea única de todos los contenedores.

También puedes combinarlo con la especificación de contenedores particulares:

docker stats container1 container2 --no-stream

Esto te dará una instantánea única de las estadísticas para container1 y container2.

Usar --no-stream es eficiente cuando no necesitas las actualizaciones en tiempo real y solo deseas capturar el estado actual del uso de recursos.

Resumen

En este laboratorio, aprendiste a utilizar efectivamente el comando docker stats para monitorear el uso de recursos de tus contenedores Docker. Comenzaste visualizando el uso de recursos en tiempo real para todos los contenedores en ejecución, observando flujos de datos de CPU, memoria, E/S de red y E/S de bloques.

Posteriormente, refinaste tu monitoreo enfocándote en contenedores específicos, utilizando sus nombres o IDs para ver su consumo individual de recursos. Esto permitió un análisis dirigido del rendimiento de los contenedores.