Dominá el CLI de Docker: Guía práctica de los comandos esenciales para desplegar contenedores
Si te metiste en el mundo de los contenedores, lo primero que te das cuenta es que, aunque existen interfaces gráficas como Docker Desktop, la verdadera potencia está en la terminal. Saber moverte por la línea de comandos (CLI) de Docker no es solo una cuestión de "estética hacker", sino que es fundamental para automatizar despliegues, debugear errores en producción y gestionar la infraestructura de manera eficiente.
Esta guía está pensada para vos, que quizás estás empezando con Docker o que ya lo usás pero sentís que siempre tenés que buscar en Google cómo borrar un contenedor que quedó colgado. Acá vamos a desglosar los comandos más usados, con ejemplos reales y explicaciones claras para que dejes de pelearte con la consola.
1. El corazón de todo: docker run
El comando run es, posiblemente, el más complejo porque en realidad hace varias cosas a la vez: busca la imagen localmente, si no la encuentra la descarga (pull), crea el contenedor y lo arranca.
Sintaxis básica
docker run [OPCIONES] IMAGEN [COMANDO] [ARGUMENTOS]
Casos de uso comunes
Ejemplo A: Correr un contenedor efímero
Si solo querés probar algo rápido y que el contenedor se borre solo al terminar, usá el flag --rm.
docker run --rm alpine echo "Hola desde Alpine"Salida esperada: Hola desde Alpine
Ejemplo B: Correr un servidor en segundo plano (Detached)
Para servicios como bases de datos o servidores web, no querés que el proceso bloquee tu terminal. Para eso usamos -d.
docker run -d --name mi-web -p 8080:80 nginxAcá estamos haciendo tres cosas clave:
-d: Lo corre en segundo plano.--name mi-web: Le damos un nombre amigable para no tener que usar el ID largo.-p 8080:80: Mapeamos el puerto 8080 de tu máquina al puerto 80 del contenedor.
2. Monitoreo y estado: docker ps
Una vez que lanzaste un par de contenedores, necesitás saber qué está pasando. Para eso tenés ps.
Ver contenedores activos
Si tirás el comando solo, solo vas a ver los que están corriendo actualmente:
docker psSalida esperada: Una tabla con columnas como CONTAINER ID, IMAGE, COMMAND, CREATED, STATUS, PORTS y NAMES.
Ver absolutamente todo
Es muy común que un contenedor falle y se detenga. Si hacés docker ps y no ves tu contenedor, probablemente se haya caído. Usá el flag -a (all) para ver los detenidos también:
docker ps -aEsto es vital para identificar contenedores que dieron error (Exited (1)) y así poder investigar qué pasó.
3. Control de ciclo de vida: docker stop y docker rm
No todo es crear; también hay que limpiar. Un servidor lleno de contenedores detenidos es un desperdicio de recursos y un caos organizativo.
Detener un contenedor
El comando stop envía una señal SIGTERM al proceso principal del contenedor, dándole tiempo de cerrar conexiones y guardar datos antes de apagarse.
docker stop mi-webSalida esperada: mi-web (el nombre del contenedor que se detuvo).
Eliminar el contenedor
Ojo acá: stop apaga el contenedor, pero el contenedor sigue existiendo en el disco (con su estado y capas de escritura). Para borrarlo definitivamente usás rm.
docker rm mi-webImportante: No podés borrar un contenedor que está corriendo. Primero tenés que hacer stop o forzar el borrado con docker rm -f mi-web.
4. Inspección y Debugging: docker logs y docker exec
Cuando algo no funciona, el CLI de Docker te da las herramientas para entrar "en las tripas" del sistema.
Revisando los logs
Si tu aplicación en el contenedor tira un error 500, lo primero es mirar la salida estándar del proceso:
docker logs mi-webSi querés seguir los logs en tiempo real (como un tail -f), agregá el flag -f:
docker logs -f mi-webEntrar al contenedor con exec
A veces los logs no alcanzan y necesitás ejecutar un comando adentro del contenedor mientras está corriendo. Para eso usamos exec.
El caso más común es abrir una terminal interactiva (shell) dentro del contenedor:
docker exec -it mi-web sh-i(interactive): Mantiene el STDIN abierto.-t(tty): Asigna una pseudo-terminal.sh: Es el comando que queremos ejecutar (en imágenes ligeras como Alpine no haybash, se usash).
Una vez adentro, podés navegar por las carpetas, revisar archivos de configuración o probar conectividad de red.
5. Gestión de imágenes: docker pull
Aunque docker run descarga la imagen automáticamente, a veces querés tener la imagen actualizada en tu máquina antes de desplegar, o simplemente bajar una imagen para analizarla.
docker pull postgres:latestEsto descarga la última versión de PostgreSQL desde Docker Hub. Podés especificar versiones usando tags (ej: postgres:15-alpine) para evitar que una actualización automática rompa tu app.
Ejemplo Práctico: Flujo Completo de Trabajo
Para que veas cómo encaja todo, vamos a simular un flujo real. Imaginá que querés probar un servidor Redis.
# 1. Descargamos la imagen
docker pull redis
# 2. Corremos el contenedor en segundo plano
docker run -d --name mi-redis -p 6379:6379 redis
# 3. Verificamos que esté corriendo
docker ps
# 4. Entramos al contenedor para ejecutar un comando de Redis
docker exec -it mi-redis redis-cli ping
# 5. Vemos los logs para confirmar que todo esté OK
docker logs mi-redis
# 6. Detenemos y borramos para limpiar
docker stop mi-redis
docker rm mi-redisBuenas Prácticas y Errores Comunes
❌ Error: Olvidar el flag -d
Si corrés un servidor sin -d, tu terminal quedará "atrapada" mostrando los logs. Si hacés Ctrl+C, probablemente detengas el contenedor. Si querés que viva solo, usá siempre el modo detached.
❌ Error: No poner nombres a los contenedores
Si no usás --name, Docker le asignará un nombre aleatorio como focused_curie o distracted_hopper. Es muy molesto tener que buscar el ID cada vez que querés hacer un stop o un logs.
✅ Tip: Limpieza masiva
Con el tiempo, vas a tener imágenes, volúmenes y contenedores huérfanos. En lugar de borrarlos uno por uno, usá el comando "nuclear":
docker system pruneEsto borra todos los contenedores detenidos, redes no usadas e imágenes sin nombre (dangling).
Conclusión
Dominar el CLI de Docker es el paso fundamental para cualquier desarrollador moderno. Pasamos por el flujo completo: desde bajar la imagen con pull, lanzarla con run, monitorearla con ps y logs, intervenirla con exec y finalmente limpiar el entorno con stop y rm.
Mi recomendación es que no intentes memorizar todo de memoria. La clave está en la práctica. Armá un pequeño entorno con una base de datos y un servidor web, rompelo a propósito y usá estos comandos para entender qué falló. Una vez que te sientas cómodo con esto, el siguiente paso lógico es aprender Docker Compose para gestionar múltiples contenedores con un solo archivo YAML.
DUGLAS MORENO
Comentarios (0)
Sé el primero en comentar.