Docker Cheatsheet

27

Los comandos de Docker que realmente usarás en el día a día

Español: 2026-03-29

Docker es una de esas herramientas que parecen excesivas hasta que despliegas a producción por primera vez sin ella — y entonces ya no vuelves atrás. En esencia, Docker simplemente empaqueta tu aplicación y su entorno en una unidad portable llamada contenedor. El mismo código, las mismas dependencias, el mismo comportamiento, ya sea en tu laptop, tu pipeline de CI o un servidor en Frankfurt.

El modelo mental es simple: las imágenes son planos, los contenedores son instancias en ejecución de esos planos. Construyes una imagen una vez y luego levantas tantos contenedores como necesites. Los volumes persisten datos más allá del ciclo de vida de un contenedor, y las networks permiten que los contenedores se comuniquen entre sí. Docker Compose une todo cuando necesitas múltiples servicios trabajando en conjunto.

Hemos organizado esto por los recursos con los que trabajas — imágenes, contenedores, volumes, networks — y Docker Compose tiene su propia sección porque a estas alturas es prácticamente una herramienta aparte. Empieza con Imágenes y Contenedores si eres nuevo. Una vez que esos se sientan naturales, volumes y networks encajarán rápido. Y si estás ejecutando algo con más de un servicio, Compose será tu hogar.

Una regla de oro: no pongas datos que te importen dentro de un contenedor sin un volume. Los contenedores son efímeros por diseño. Cuando desaparecen, todo dentro de ellos desaparece también. Los volumes son tu salvavidas.

Imágenes
docker build -t <name> .
Construir una imagen desde el Dockerfile en el directorio actual
docker build -t <name>:<tag> .
Construir y etiquetar una imagen con una versión específica
docker build --no-cache -t <name> .
Construir desde cero, ignorando las capas en caché
docker pull <image>
Descargar una imagen desde un registry (Docker Hub por defecto)
docker push <image>
Subir una imagen a un registry
docker images
Listar todas las imágenes almacenadas localmente
docker images -q
Listar solo los IDs de imágenes (útil para scripting)
docker tag <image> <new:tag>
Crear una nueva etiqueta apuntando a una imagen existente
docker rmi <image>
Eliminar una imagen
docker rmi $(docker images -q -f dangling=true)
Eliminar todas las imágenes colgantes (sin etiqueta)
docker image prune
Eliminar imágenes no utilizadas (colgantes)
docker image prune -a
Eliminar todas las imágenes no usadas por ningún contenedor
docker history <image>
Mostrar el historial de capas de una imagen
docker inspect <image>
Mostrar metadatos detallados de una imagen en JSON
Contenedores
docker run <image>
Crear e iniciar un contenedor a partir de una imagen
docker run -d <image>
Ejecutar un contenedor en segundo plano (modo detached)
docker run -it <image> sh
Ejecutar interactivamente con una shell (ideal para depurar)
docker run -p 8080:80 <image>
Mapear el puerto 8080 del host al puerto 80 del contenedor
docker run --name <name> <image>
Ejecutar un contenedor con un nombre legible
docker run --rm <image>
Eliminar automáticamente el contenedor cuando termine
docker run -e KEY=value <image>
Pasar una variable de entorno al contenedor
docker run --env-file .env <image>
Cargar variables de entorno desde un archivo
docker ps
Listar contenedores en ejecución
docker ps -a
Listar todos los contenedores, incluidos los detenidos
docker start <container>
Iniciar un contenedor detenido
docker stop <container>
Detener un contenedor en ejecución de forma ordenada (SIGTERM, luego SIGKILL)
docker kill <container>
Terminar inmediatamente un contenedor en ejecución (SIGKILL)
docker restart <container>
Detener e iniciar un contenedor
docker exec -it <container> sh
Abrir una shell dentro de un contenedor en ejecución
docker exec <container> <cmd>
Ejecutar un comando puntual dentro de un contenedor en ejecución
docker logs <container>
Mostrar stdout/stderr de un contenedor
docker logs -f <container>
Seguir los logs en tiempo real (como tail -f)
docker logs --tail 100 <container>
Mostrar las últimas 100 líneas de logs
docker rm <container>
Eliminar un contenedor detenido
docker rm -f <container>
Forzar la eliminación de un contenedor, incluso si está en ejecución
docker rm $(docker ps -aq)
Eliminar todos los contenedores detenidos
docker cp <container>:/path /local
Copiar archivos de un contenedor a tu host
docker inspect <container>
Mostrar metadatos detallados del contenedor en JSON
docker stats
Flujo en vivo de uso de CPU, memoria y red de todos los contenedores
Volumes
docker volume create <name>
Crear un volume con nombre
docker run -v <vol>:/data <image>
Montar un volume con nombre en /data dentro del contenedor
docker run -v $(pwd):/app <image>
Montar el directorio actual dentro del contenedor (bind mount)
docker run -v $(pwd):/app:ro <image>
Montar como solo lectura (el contenedor no puede escribir)
docker volume ls
Listar todos los volumes
docker volume inspect <name>
Mostrar detalles de un volume (punto de montaje, driver, etc.)
docker volume rm <name>
Eliminar un volume
docker volume prune
Eliminar todos los volumes no usados por ningún contenedor
Networks
docker network create <name>
Crear una red bridge definida por el usuario
docker network create --driver overlay <name>
Crear una red overlay (para Swarm / multi-host)
docker run --network <name> <image>
Ejecutar un contenedor conectado a una red específica
docker network connect <net> <container>
Conectar un contenedor en ejecución a una red
docker network disconnect <net> <container>
Desconectar un contenedor de una red
docker network ls
Listar todas las redes
docker network inspect <name>
Mostrar detalles de la red incluyendo contenedores conectados
docker network rm <name>
Eliminar una red
docker network prune
Eliminar todas las redes no utilizadas
Docker Compose
docker compose up
Crear e iniciar todos los servicios definidos en compose.yaml
docker compose up -d
Iniciar servicios en segundo plano
docker compose up --build
Reconstruir imágenes antes de iniciar servicios
docker compose up <service>
Iniciar solo un servicio específico (y sus dependencias)
docker compose down
Detener y eliminar contenedores y redes creados por up
docker compose down -v
Igual que down, pero también elimina volumes con nombre
docker compose down --rmi all
Detener todo y eliminar también las imágenes
docker compose build
Construir o reconstruir todas las imágenes de servicios
docker compose build --no-cache
Reconstruir todas las imágenes desde cero
docker compose logs
Mostrar logs de todos los servicios
docker compose logs -f <service>
Seguir los logs de un servicio específico
docker compose ps
Listar contenedores gestionados por Compose
docker compose exec <service> sh
Abrir una shell en un contenedor de servicio en ejecución
docker compose run <service> <cmd>
Ejecutar un comando puntual en un nuevo contenedor para ese servicio
docker compose pull
Descargar las últimas imágenes para todos los servicios
docker compose restart <service>
Reiniciar un servicio específico
docker compose config
Validar y mostrar la configuración resuelta de Compose
Sistema y Limpieza
docker system df
Mostrar uso de disco por imágenes, contenedores y volumes
docker system prune
Eliminar contenedores detenidos, redes no usadas e imágenes colgantes
docker system prune -a --volumes
La opción nuclear — recuperar todo el espacio no utilizado
docker info
Mostrar la configuración y estadísticas globales de Docker
docker version
Mostrar versiones del cliente y servidor de Docker

Usa docker run --rm para contenedores desechables. Sin ello, los contenedores detenidos se acumulan silenciosamente. Ejecuta docker ps -a alguna vez — podrías sorprenderte de cuántos zombis están al acecho.

Agrega un archivo .dockerignore a tu proyecto. Funciona como .gitignore pero para las construcciones. Excluir node_modules, .git y archivos de configuración local puede reducir tu contexto de construcción de gigabytes a kilobytes y acelerar las construcciones drásticamente.

Ordena las instrucciones de tu Dockerfile de menos a más frecuentemente modificadas. Docker cachea las capas de arriba hacia abajo, así que poner COPY package.json y RUN npm install antes de COPY . . significa que solo reinstalarás dependencias cuando realmente cambien — no en cada edición de código.

Usa docker compose up --build durante el desarrollo en lugar de pasos separados de build y up. Solo reconstruye lo que cambió y te ahorra el clásico "por qué no aparece mi cambio" que te rompe la cabeza.

Ejecuta docker system prune regularmente. Docker es sorprendentemente bueno acumulando espacio en disco. Agrega -a --volumes si quieres hacer tierra arrasada, pero ten cuidado — eso elimina todo lo que no esté activamente en uso, incluyendo volumes con nombre que contienen datos.

Prefiere docker compose exec sobre docker exec cuando uses Compose. Puedes referenciar servicios por nombre en lugar de buscar IDs de contenedores. docker compose exec db psql -U postgres supera copiar un hash de 12 caracteres cada vez.

Usa construcciones multi-stage para mantener las imágenes de producción ligeras. Construye tu app en una etapa con todas las dependencias de desarrollo, luego copia solo la salida compilada a una imagen base mínima. Tu imagen de Node de 1.2 GB se convierte en 150 MB.

Related Tools