🚀 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