¿Cómo filtrar contenedores Docker por nombre?

DockerBeginner
Practicar Ahora

Introducción

Docker se ha convertido en una herramienta esencial para desarrolladores y profesionales de TI, proporcionando una plataforma poderosa para la contenerización de aplicaciones. En este tutorial, exploraremos cómo filtrar contenedores Docker por nombre, una habilidad crucial para gestionar eficazmente su entorno Docker. Al final de esta guía, podrá localizar y gestionar eficientemente contenedores específicos basándose en sus nombres, lo que le permitirá optimizar sus flujos de trabajo de Docker.

Visualización de Contenedores Docker con docker ps

Antes de poder filtrar contenedores Docker, primero necesitamos entender cómo visualizar los contenedores que se están ejecutando en nuestro sistema. El comando más fundamental para este propósito es docker ps.

Entendiendo el comando docker ps

El comando docker ps lista todos los contenedores Docker en ejecución en su sistema. Cuando ejecuta este comando, verá información sobre cada contenedor, incluyendo:

  • ID del Contenedor (Container ID): Un identificador único para el contenedor
  • Imagen (Image): La imagen Docker utilizada para crear el contenedor
  • Comando (Command): El comando que se está ejecutando dentro del contenedor
  • Creado (Created): Cuándo se creó el contenedor
  • Estado (Status): El estado actual del contenedor
  • Puertos (Ports): Cualquier mapeo de puertos
  • Nombres (Names): El nombre del contenedor

Ejecutemos el comando docker ps para ver todos los contenedores en ejecución:

docker ps

Debería ver una salida similar a esta:

CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS     NAMES
54a76e95d987   alpine    "sleep 1000"             About a minute ago   Up About a minute             db-server
26f8c661f7a5   alpine    "sleep 1000"             About a minute ago   Up About a minute             utility-alpine
a3bb567cc561   redis     "docker-entrypoint.s…"   About a minute ago   Up About a minute   6379/tcp  cache-server
f1d07c98e753   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    web-frontend

Visualización de Todos los Contenedores

Por defecto, docker ps solo muestra los contenedores en ejecución. Para ver todos los contenedores, incluyendo aquellos que se han detenido, use la bandera -a:

docker ps -a

Este comando mostrará todos los contenedores, independientemente de su estado. Esto es útil cuando desea ver contenedores que han salido o están en pausa.

Visualización Solo de los IDs de Contenedor

Si solo necesita los IDs de los contenedores, puede usar la bandera -q:

docker ps -q

Esto produce solo los IDs de los contenedores, lo cual puede ser útil cuando necesita pasarlos a otros comandos.

Pruebe estos comandos en su terminal para familiarizarse con la funcionalidad básica de listado de contenedores antes de pasar a la filtración en el siguiente paso.

Filtrado Básico de Contenedores por Nombre

Ahora que entendemos cómo listar contenedores Docker, aprendamos a filtrarlos por nombre. Cuando tiene múltiples contenedores en ejecución, encontrar uno específico puede ser un desafío. Docker proporciona capacidades de filtrado que facilitan mucho esta tarea.

Usando la opción --filter

El comando docker ps admite el filtrado a través de la opción --filter o -f. La sintaxis básica para filtrar por nombre es:

docker ps --filter name=<nombre-del-contenedor>

Intentemos filtrar los contenedores que tienen "web" en su nombre:

docker ps --filter name=web

Debería ver una salida similar a esta:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   80/tcp    web-frontend

Observe que se muestran ambos contenedores web-frontend y web-backend ya que ambos contienen la palabra "web" en sus nombres.

Filtrado por Nombres Exactos

Para filtrar un contenedor con un nombre exacto, puede usar el nombre completo:

docker ps --filter name=web-frontend

Este comando mostrará solo el contenedor llamado exactamente "web-frontend":

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
d6fe891c1f04   nginx     "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes   80/tcp    web-frontend

Usando Múltiples Filtros

Puede aplicar múltiples filtros agregando múltiples opciones --filter. Por ejemplo, para encontrar todos los contenedores con "web" en su nombre Y construidos a partir de la imagen "nginx":

docker ps --filter name=web --filter ancestor=nginx

El resultado debería ser el mismo que nuestro primer filtro, ya que ambos contenedores "web" usan la imagen nginx:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   15 minutes ago   Up 15 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   15 minutes ago   Up 15 minutes   80/tcp    web-frontend

Filtrado de Contenedores por el Inicio del Nombre

Si desea filtrar contenedores cuyos nombres comienzan con una cadena específica, puede usar un patrón como este:

docker ps --filter name=^db

Este comando mostrará los contenedores cuyos nombres comienzan con "db":

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
54a76e95d987   alpine    "sleep 1000"  16 minutes ago   Up 16 minutes             db-server

Pruebe estos comandos de filtrado en su terminal para practicar la búsqueda de contenedores específicos por sus nombres.

Filtrado Avanzado y Formateo de la Salida

Ahora que hemos dominado el filtrado básico por nombre, exploremos algunas técnicas más avanzadas para filtrar y formatear la salida del comando docker ps. Estas habilidades le ayudarán a administrar su entorno Docker de manera más eficiente.

Combinando Múltiples Criterios de Filtrado

Docker le permite combinar múltiples criterios de filtrado para acotar sus resultados. Por ejemplo, para encontrar todos los contenedores con "web" en su nombre que se están ejecutando actualmente:

docker ps --filter name=web --filter status=running

Esto mostrará todos los contenedores en ejecución que tengan "web" en su nombre:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   25 minutes ago   Up 25 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   25 minutes ago   Up 25 minutes   80/tcp    web-frontend

Usando la opción --format para Salida Personalizada

El comando docker ps admite el formateo de salida personalizado utilizando la opción --format con plantillas Go. Esto le permite mostrar solo la información que necesita en el formato que desea.

Por ejemplo, para mostrar solo los nombres de los contenedores y su estado:

docker ps --format "table {{.Names}}\t{{.Status}}"

Verá una salida simplificada como esta:

NAMES               STATUS
db-server           Up 26 minutes
utility-alpine      Up 26 minutes
cache-server        Up 26 minutes
web-backend         Up 26 minutes
web-frontend        Up 26 minutes

Combinando Filtrado y Formateo

Puede combinar el filtrado y el formateo para obtener exactamente la información que necesita:

docker ps --filter name=web --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"

Esto mostrará una tabla con los nombres, imágenes y estado de los contenedores con "web" en su nombre:

NAMES               IMAGE               STATUS
web-backend         nginx               Up 27 minutes
web-frontend        nginx               Up 27 minutes

Usando Filtrado Tipo Regex

El sistema de filtrado de Docker admite algunos patrones tipo regex. Por ejemplo, para encontrar contenedores cuyos nombres contengan "web" O "cache":

docker ps --filter name=web --filter name=cache

Esto mostrará tanto los contenedores web como los contenedores de caché:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
a3bb567cc561   redis     "docker-entrypoint.s…"   30 minutes ago   Up 30 minutes   6379/tcp   cache-server
f1d07c98e753   nginx     "/docker-entrypoint.…"   30 minutes ago   Up 30 minutes   80/tcp     web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   30 minutes ago   Up 30 minutes   80/tcp     web-frontend

Ejemplo Práctico: Script de Gestión de Contenedores

Creemos un script simple que demuestre cómo se puede usar el filtrado en un escenario práctico. Cree un nuevo archivo llamado container-stats.sh con el siguiente contenido:

nano container-stats.sh

Agregue el siguiente script:

#!/bin/bash
## This script displays container names, images and status for a filtered set of containers

echo "Web containers:"
docker ps --filter name=web --format "{{.Names}} - {{.Image}} - {{.Status}}"

echo -e "\nCache and database containers:"
docker ps --filter name=cache --filter name=db --format "{{.Names}} - {{.Image}} - {{.Status}}"

Guarde el archivo (Ctrl+O, Enter, luego Ctrl+X) y hágalo ejecutable:

chmod +x container-stats.sh

Ahora ejecute el script para ver la información de los contenedores filtrada y formateada:

./container-stats.sh

Debería ver una salida similar a:

Web containers:
web-backend - nginx - Up 35 minutes
web-frontend - nginx - Up 35 minutes

Cache and database containers:
cache-server - redis - Up 35 minutes
db-server - alpine - Up 35 minutes

Este script demuestra cómo se puede usar el filtrado de contenedores para organizar y presentar información sobre su entorno Docker de una manera más legible y útil.

Aplicaciones Prácticas del Filtrado de Contenedores

En este paso, exploraremos aplicaciones prácticas del filtrado de contenedores para realizar tareas comunes de gestión de Docker. Estos ejemplos demuestran cómo el filtrado se puede usar en escenarios del mundo real para que la gestión de contenedores sea más eficiente.

Encontrar y Reiniciar Contenedores Específicos

Digamos que necesita reiniciar todos los contenedores relacionados con la web. Puede usar el filtrado por nombre para identificarlos y luego reiniciarlos:

## Primero, identifique los contenedores web
docker ps --filter name=web

## Ahora, reinícielos uno por uno
docker restart web-frontend
docker restart web-backend

Después de ejecutar estos comandos, debería ver la confirmación de que cada contenedor se reinició:

web-frontend
web-backend

Encontrar y Eliminar Todos los Contenedores con un Patrón de Nombre Específico

Si necesita eliminar todos los contenedores con un cierto patrón de nombre, puede combinar el filtrado con la eliminación de contenedores:

## ADVERTENCIA: Esto es solo para demostración. En un entorno real,
## ¡asegúrese de saber lo que está eliminando!

## Enumere los contenedores con "utility" en sus nombres
docker ps -a --filter name=utility

Debería ver su contenedor de utilidad:

CONTAINER ID   IMAGE     COMMAND         CREATED          STATUS          PORTS     NAMES
26f8c661f7a5   alpine    "sleep 1000"    45 minutes ago   Up 45 minutes             utility-alpine

Para eliminarlo, normalmente usaría:

## Realmente no ejecutaremos este comando para preservar nuestro entorno de laboratorio
## docker rm -f $(docker ps -aq --filter name=utility)

En cambio, veamos cómo funciona este comando:

## Solo obtenga los ID que se verían afectados
docker ps -aq --filter name=utility

Esto mostrará el ID del contenedor:

26f8c661f7a5

Usando el Filtrado para Monitorear Grupos de Contenedores Específicos

El filtrado de contenedores es útil para la monitorización dirigida. Creemos un script de monitorización simple que compruebe el estado de nuestros contenedores web:

nano web-monitor.sh

Agregue el siguiente script:

#!/bin/bash
## This script checks the status of web containers and reports if any are not running

echo "=== Web Container Status Check ==="
docker ps -a --filter name=web --format "{{.Names}}: {{.Status}}"

## Count stopped web containers
STOPPED=$(docker ps -a --filter name=web --filter status=exited --format "{{.Names}}" | wc -l)

if [ $STOPPED -gt 0 ]; then
  echo -e "\nWARNING: $STOPPED web containers are not running!"
else
  echo -e "\nAll web containers are running normally."
fi

Guarde el archivo (Ctrl+O, Enter, luego Ctrl+X) y hágalo ejecutable:

chmod +x web-monitor.sh

Ahora, ejecute el script para ver el estado de sus contenedores web:

./web-monitor.sh

Debería ver una salida similar a:

=== Web Container Status Check ===
web-backend: Up 50 minutes
web-frontend: Up 50 minutes

All web containers are running normally.

Filtrado en Tuberías CI/CD

En las tuberías CI/CD, el filtrado de contenedores puede ser esencial para las pruebas y el despliegue automatizados. Creemos un script que simule un proceso de despliegue que se dirige solo a los contenedores con un patrón de nombre específico:

nano deploy-update.sh

Agregue el siguiente script:

#!/bin/bash
## This script simulates updating all containers of a specific type

TARGET_CONTAINERS=$1

if [ -z "$TARGET_CONTAINERS" ]; then
  echo "Usage: $0 <container-name-pattern>"
  exit 1
fi

echo "Preparing to update containers matching pattern: $TARGET_CONTAINERS"
echo "Containers affected:"
docker ps --filter name=$TARGET_CONTAINERS --format "{{.Names}}"

echo -e "\nIn a real deployment, this would:"
echo "1. Pull the latest images"
echo "2. Stop each container"
echo "3. Start new containers with the updated images"
echo "4. Verify the containers are running correctly"

echo -e "\nSimulation completed successfully!"

Guarde el archivo (Ctrl+O, Enter, luego Ctrl+X) y hágalo ejecutable:

chmod +x deploy-update.sh

Ahora, simulemos la actualización de nuestros contenedores web:

./deploy-update.sh web

Debería ver una salida similar a:

Preparing to update containers matching pattern: web
Containers affected:
web-backend
web-frontend

In a real deployment, this would:
1. Pull the latest images
2. Stop each container
3. Start new containers with the updated images
4. Verify the containers are running correctly

Simulation completed successfully!

Estos ejemplos prácticos demuestran cómo el filtrado de contenedores se puede integrar en su flujo de trabajo de Docker para que la gestión de contenedores sea más eficiente y automatizada.

Resumen

En este laboratorio, ha aprendido a filtrar eficazmente los contenedores Docker por nombre, una habilidad esencial para administrar entornos Docker de cualquier tamaño. Revisemos lo que hemos cubierto:

  1. Listado Básico de Contenedores: Aprendió a usar el comando docker ps para ver los contenedores en ejecución y sus diversas opciones como -a para mostrar todos los contenedores.

  2. Filtrado Básico por Nombre: Descubrió cómo usar la opción --filter name= para encontrar contenedores por nombre, tanto coincidencias exactas como coincidencias parciales.

  3. Filtrado y Formateo Avanzados: Exploró cómo combinar múltiples filtros y personalizar la salida usando la opción --format para mostrar solo la información que necesita.

  4. Aplicaciones Prácticas: Creó scripts que demuestran usos del mundo real del filtrado de contenedores para tareas de monitorización, gestión y despliegue.

Estas habilidades le ayudarán a administrar los entornos Docker de manera más eficiente, especialmente a medida que crece el número de contenedores. El filtrado de contenedores es particularmente valioso en entornos de desarrollo, pruebas y producción donde necesita identificar y administrar rápidamente contenedores específicos.

A medida que continúa su viaje con Docker, considere explorar otras opciones de filtrado más allá del filtrado por nombre, como el filtrado por volumen, red o etiqueta. Estas técnicas de filtrado adicionales pueden mejorar aún más sus capacidades de gestión de contenedores.