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:
Listado Básico de Contenedores: Aprendió a usar el comando
docker pspara ver los contenedores en ejecución y sus diversas opciones como-apara mostrar todos los contenedores.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.Filtrado y Formateo Avanzados: Exploró cómo combinar múltiples filtros y personalizar la salida usando la opción
--formatpara mostrar solo la información que necesita.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.



