Comandos Esenciales de Docker 🐳

🚀 Gestión de Contenedores

Ejecutar contenedores:

# Ejecutar contenedor en foreground
docker run nombre-imagen

# Ejecutar en background (detached)
docker run -d nombre-imagen

# Ejecutar con nombre personalizado
docker run --name mi-contenedor nombre-imagen

# Ejecutar mapeando puertos
docker run -p 8080:80 nombre-imagen

# Ejecutar mapeando volúmenes
docker run -v /ruta/local:/ruta/contenedor nombre-imagen

# Ejecutar con variables de entorno
docker run -e VARIABLE=valor nombre-imagen

Gestionar contenedores:

# Listar contenedores en ejecución
docker ps

# Listar TODOS los contenedores (incluyendo detenidos)
docker ps -a

# Detener contenedor
docker stop nombre-contenedor

# Iniciar contenedor detenido
docker start nombre-contenedor

# Reiniciar contenedor
docker restart nombre-contenedor

# Eliminar contenedor (debe estar detenido)
docker rm nombre-contenedor

# Eliminar contenedor aunque esté ejecutándose
docker rm -f nombre-contenedor

# Ver logs de contenedor
docker logs nombre-contenedor

# Ver logs en tiempo real
docker logs -f nombre-contenedor

📦 Gestión de Imágenes

Trabajar con imágenes:

# Descargar imagen
docker pull nombre-imagen:tag

# Listar imágenes locales
docker images

# Eliminar imagen
docker rmi nombre-imagen

# Eliminar imagen forzadamente
docker rmi -f nombre-imagen

# Limpiar imágenes no usadas
docker image prune

# Inspeccionar imagen
docker inspect nombre-imagen

Construir imágenes:

# Construir imagen desde Dockerfile
docker build -t nombre-imagen .

# Construir con tag específico
docker build -t nombre-imagen:1.0 .

# Construir sin cache
docker build --no-cache -t nombre-imagen .

🔍 Monitoreo e Inspección

Información del sistema:

# Ver uso de recursos
docker stats

# Ver uso de recursos en tiempo real
docker stats --all

# Ver información del sistema Docker
docker system info

# Ver uso de disco
docker system df

# Ver eventos en tiempo real
docker events

Inspeccionar recursos:

# Inspeccionar contenedor
docker inspect nombre-contenedor

# Ver procesos dentro del contenedor
docker top nombre-contenedor

# Ver puertos mapeados
docker port nombre-contenedor

# Ver cambios en el filesystem
docker diff nombre-contenedor

🛠 Ejecución Interactiva

Trabajar dentro de contenedores:

# Ejecutar comando en contenedor running
docker exec nombre-contenedor comando

# Ejecutar shell interactiva
docker exec -it nombre-contenedor bash

# Ejecutar como root
docker exec -u root -it nombre-contenedor bash

# Ejecutar con variables de entorno
docker exec -e VARIABLE=valor nombre-contenedor comando

Contenedores interactivos:

# Ejecutar contenedor interactivo
docker run -it nombre-imagen bash

# Ejecutar con shell específica
docker run -it nombre-imagen sh

🗂 Gestión de Volúmenes

Trabajar con volúmenes:

# Listar volúmenes
docker volume ls

# Crear volumen
docker volume create nombre-volumen

# Inspeccionar volumen
docker volume inspect nombre-volumen

# Eliminar volumen
docker volume rm nombre-volumen

# Limpiar volúmenes no usados
docker volume prune

Usar volúmenes:

# Montar volumen en contenedor
docker run -v nombre-volumen:/ruta/contenedor nombre-imagen

# Montar volumen de solo lectura
docker run -v nombre-volumen:/ruta/contenedor:ro nombre-imagen

🌐 Gestión de Redes

Trabajar con redes:

# Listar redes
docker network ls

# Crear red
docker network create nombre-red

# Conectar contenedor a red
docker network connect nombre-red nombre-contenedor

# Desconectar contenedor de red
docker network disconnect nombre-red nombre-contenedor

# Inspeccionar red
docker network inspect nombre-red

# Eliminar red
docker network rm nombre-red

🧹 Limpieza y Mantenimiento

Comandos de limpieza:

# Eliminar contenedores detenidos
docker container prune

# Eliminar imágenes no usadas
docker image prune

# Eliminar volúmenes no usados
docker volume prune

# Eliminar redes no usadas
docker network prune

# LIMPIEZA TOTAL (cuidado!)
docker system prune -a

Verificar espacio:

# Ver uso de disco
docker system df

# Ver uso detallado
docker system df -v

🚨 Comandos de Emergencia

Forzar detención:

# Matar contenedor inmediatamente
docker kill nombre-contenedor

# Detener todos los contenedores
docker stop $(docker ps -aq)

# Eliminar todos los contenedores
docker rm -f $(docker ps -aq)

# Eliminar todas las imágenes
docker rmi -f $(docker images -aq)

📋 Docker Compose Esencial

Comandos básicos:

# Iniciar servicios
docker-compose up

# Iniciar en background
docker-compose up -d

# Detener servicios
docker-compose down

# Ver logs
docker-compose logs

# Ver logs específicos
docker-compose logs nombre-servicio

# Listar servicios
docker-compose ps

# Ejecutar comando en servicio
docker-compose exec nombre-servicio comando

Gestión con compose:

# Iniciar servicio específico
docker-compose up nombre-servicio

# Recargar configuración
docker-compose restart

# Reconstruir imágenes
docker-compose build

# Ver estado
docker-compose ps

🎯 Comandos Útiles para Desarrollo

Desarrollo y debugging:

# Copiar archivos desde/hacia contenedor
docker cp nombre-contenedor:/ruta/origen /ruta/local
docker cp /ruta/local nombre-contenedor:/ruta/destino

# Ver variables de entorno del contenedor
docker exec nombre-contenedor env

# Ver configuración del contenedor
docker inspect nombre-contenedor | grep -i env

# Guardar cambios como nueva imagen
docker commit nombre-contenedor nueva-imagen

Para troubleshooting:

# Ver información completa del contenedor
docker inspect nombre-contenedor

# Ver logs con timestamps
docker logs -t nombre-contenedor

# Ver últimas N líneas de logs
docker logs --tail 100 nombre-contenedor

# Ver métricas de rendimiento
docker stats nombre-contenedor

💡 Aliases Útiles (Agregar a ~/.bashrc)

# Aliases para Docker
alias dps='docker ps'
alias dpsa='docker ps -a'
alias dimg='docker images'
alias dstop='docker stop $(docker ps -aq)'
alias drm='docker rm $(docker ps -aq)'
alias dlogs='docker logs -f'
alias dexec='docker exec -it'

🎪 Ejemplos Prácticos

Ejemplo 1: Desarrollo web

# Ejecutar Nginx con puerto 8080
docker run -d -p 8080:80 --name mi-web nginx

# Verificar
curl localhost:8080

# Ver logs
docker logs mi-web

Ejemplo 2: Base de datos

# Ejecutar MySQL con variables de entorno
docker run -d \
  --name mi-db \
  -e MYSQL_ROOT_PASSWORD=secret \
  -e MYSQL_DATABASE=mi-app \
  -p 3306:3306 \
  mysql:8.0

# Conectarse a la DB
docker exec -it mi-db mysql -u root -p

Ejemplo 3: Aplicación Node.js

# Construir imagen
docker build -t mi-app .

# Ejecutar con variables y puertos
docker run -d \
  --name mi-app \
  -p 3000:3000 \
  -e NODE_ENV=production \
  mi-app