Cómo usar el comando docker compose top para mostrar procesos en ejecución

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 utilizar el comando docker compose top para mostrar los procesos en ejecución dentro de tus contenedores Docker. Comenzaremos preparando un archivo simple docker-compose.yml para definir un servicio, luego iniciaremos el servicio usando Docker Compose. Finalmente, usarás el comando docker compose top, tanto de forma general como con un nombre de servicio específico, para inspeccionar los procesos que se ejecutan dentro de los contenedores.


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/start("Start Container") docker/ContainerOperationsGroup -.-> docker/top("Display Running Processes in Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ps -.-> lab-555094{{"Cómo usar el comando docker compose top para mostrar procesos en ejecución"}} docker/start -.-> lab-555094{{"Cómo usar el comando docker compose top para mostrar procesos en ejecución"}} docker/top -.-> lab-555094{{"Cómo usar el comando docker compose top para mostrar procesos en ejecución"}} docker/pull -.-> lab-555094{{"Cómo usar el comando docker compose top para mostrar procesos en ejecución"}} end

Preparar un archivo docker-compose.yml simple

En este paso, prepararemos un archivo simple docker-compose.yml. Antes de comenzar, entendamos qué es Docker Compose. Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker con múltiples contenedores. Con Compose, usas un archivo YAML para configurar los servicios de tu aplicación. Luego, con un solo comando, creas e inicias todos los servicios desde tu configuración.

Como Docker Compose no viene preinstalado en el entorno de LabEx, primero necesitamos instalarlo. Descargaremos el binario de Docker Compose y lo haremos ejecutable.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Ahora que Docker Compose está instalado, creemos un archivo simple docker-compose.yml en el directorio ~/project. Este archivo definirá un único servicio que utiliza la imagen ubuntu y simplemente ejecuta el comando sleep infinity para mantener el contenedor en ejecución.

Usaremos el editor nano para crear y editar el archivo.

nano ~/project/docker-compose.yml

En el editor nano, pega el siguiente contenido:

version: "3.8"
services:
  ubuntu_service:
    image: ubuntu
    command: sleep infinity

Analicemos este archivo docker-compose.yml:

  • version: '3.8' especifica la versión del formato del archivo Compose.
  • services: define los servicios para tu aplicación.
  • ubuntu_service: es el nombre de nuestro servicio. Puedes elegir cualquier nombre que prefieras.
  • image: ubuntu especifica la imagen Docker a usar para este servicio. En este caso, usamos la imagen oficial ubuntu. Como la imagen podría no estar presente localmente, Docker Compose la descargará automáticamente si es necesario.
  • command: sleep infinity especifica el comando a ejecutar cuando el contenedor inicie. sleep infinity es un comando simple que mantiene el contenedor en ejecución indefinidamente.

Después de pegar el contenido, guarda el archivo presionando Ctrl + X, luego Y para confirmar y Enter para guardar con el nombre predeterminado docker-compose.yml.

Para asegurarnos de que la imagen ubuntu esté disponible, descarguémosla manualmente usando el comando docker pull. Esta es una buena práctica para garantizar que la imagen esté lista antes de iniciar el servicio con Docker Compose.

docker pull ubuntu

Deberías ver una salida que indique que la imagen ubuntu se está descargando.

Iniciar los servicios definidos en el archivo docker-compose.yml

En este paso, iniciaremos los servicios definidos en el archivo docker-compose.yml que creamos en el paso anterior. Utilizaremos el comando docker compose up para lograrlo.

Navega al directorio donde guardaste el archivo docker-compose.yml, que es ~/project.

cd ~/project

Ahora, ejecuta el comando docker compose up. El flag -d ejecuta los contenedores en modo detached (desacoplado), lo que significa que se ejecutarán en segundo plano sin bloquear tu terminal.

docker compose up -d

Deberías ver una salida que indica que el servicio se está creando e iniciando. Docker Compose creará una red, un volumen (si estuviera definido, aunque no en nuestro ejemplo simple) y el contenedor para el servicio ubuntu_service.

Para verificar que el contenedor está en ejecución, puedes usar el comando docker ps.

docker ps

Deberías ver un contenedor listado con la imagen ubuntu y el comando sleep infinity. El estado debería ser Up. El nombre del contenedor tendrá como prefijo el nombre del directorio (project en este caso) y el nombre del servicio (ubuntu_service).

Usar docker compose top para mostrar todos los procesos en ejecución

En este paso, utilizaremos el comando docker compose top para mostrar los procesos en ejecución dentro de los contenedores gestionados por Docker Compose. Este comando es similar al comando top en Linux, pero muestra los procesos que se ejecutan dentro de los contenedores.

Asegúrate de estar aún en el directorio ~/project donde se encuentra tu archivo docker-compose.yml.

cd ~/project

Ahora, ejecuta el comando docker compose top.

docker compose top

Deberías ver una salida similar a la siguiente:

ID                  NAME                PID                 COMMAND             ELAPSED
<container_id>      project-ubuntu_service-1   <pid>               sleep infinity      <time>

Esta salida muestra los procesos en ejecución dentro de cada contenedor gestionado por tu archivo docker-compose.yml. En nuestro caso, solo tenemos un servicio (ubuntu_service), y el único proceso en ejecución es sleep infinity, que es el comando que especificamos en el archivo docker-compose.yml.

La salida incluye:

  • ID: El ID del contenedor.
  • NAME: El nombre del contenedor, que típicamente sigue el formato <nombre_directorio>-<nombre_servicio>-<número_instancia>.
  • PID: El ID del proceso del comando que se ejecuta dentro del contenedor.
  • COMMAND: El comando que se está ejecutando dentro del contenedor.
  • ELAPSED: El tiempo transcurrido desde que se inició el comando.

Este comando es útil para inspeccionar qué se está ejecutando dentro de tus contenedores y solucionar problemas.

Usar docker compose top con nombre de servicio para mostrar procesos específicos

En este paso, aprenderemos cómo usar el comando docker compose top para mostrar los procesos de un servicio específico definido en tu archivo docker-compose.yml. Esto es útil cuando tienes múltiples servicios en ejecución y solo deseas inspeccionar los procesos de uno de ellos.

Asegúrate de seguir en el directorio ~/project.

cd ~/project

Para mostrar los procesos de un servicio específico, añade el nombre del servicio al comando docker compose top. En nuestro archivo docker-compose.yml, el nombre del servicio es ubuntu_service.

docker compose top ubuntu_service

Deberías ver una salida similar al paso anterior, pero esta vez solo mostrará los procesos del contenedor ubuntu_service:

ID                  NAME                PID                 COMMAND             ELAPSED
<container_id>      project-ubuntu_service-1   <pid>               sleep infinity      <time>

Si tuvieras otros servicios definidos en tu archivo docker-compose.yml y estuvieran en ejecución, al ejecutar docker compose top sin especificar un servicio mostraría los procesos de todos los servicios. Al especificar ubuntu_service, filtramos la salida para mostrar solo los procesos dentro del contenedor de ese servicio específico.

Este enfoque dirigido es útil para depurar y monitorear componentes individuales de tu aplicación multi-contenedor.

Resumen

En este laboratorio, aprendimos a usar el comando docker compose top para mostrar los procesos en ejecución dentro de contenedores Docker gestionados por Docker Compose. Comenzamos preparando un archivo docker-compose.yml simple, lo que implicó instalar Docker Compose y definir un servicio usando la imagen ubuntu con un comando sleep infinity para mantener el contenedor en ejecución.

Tras la preparación, iniciamos los servicios definidos en el archivo docker-compose.yml. Finalmente, exploramos el uso del comando docker compose top, primero para mostrar todos los procesos en ejecución en todos los servicios y luego específicamente para un solo servicio proporcionando su nombre. Esta experiencia práctica demostró cómo inspeccionar los procesos que se ejecutan dentro de nuestros contenedores gestionados por Docker Compose.