Descripción general
Docker CLI es tu herramienta principal para construir, ejecutar y gestionar contenedores e imágenes. Esta chuleta cubre los comandos que usas todos los días: construir y extraer imágenes, ejecutar e inspeccionar contenedores, gestionar volúmenes y redes, limpiar recursos y usar buildx para compilaciones multiplataforma. Todos los comandos son actuales para Docker Engine 27.
Imágenes: construir y gestionar
| Comando | Qué hace | Ejemplo |
|---|---|---|
docker build -t <name>:<tag> . |
Construir una imagen desde un Dockerfile en el directorio actual | docker build -t myapp:1.0 . |
docker build -f <dockerfile-path> -t <name>:<tag> <context> |
Construir usando un Dockerfile nombrado | docker build -f Dockerfile.prod -t app:prod . |
docker build --build-arg <key>=<value> -t <name>:<tag> . |
Pasar argumentos de construcción al proceso de construcción | docker build --build-arg NODE_ENV=production -t app:prod . |
docker build -m <memory> -t <name>:<tag> . |
Limitar memoria durante la construcción (p. ej., 1g) |
docker build -m 2g -t app:1.0 . |
docker build -t <name>:<tag> --no-cache . |
Desactivar almacenamiento en caché de capa (reconstruir desde cero) | docker build -t app:1.0 --no-cache . |
docker image ls |
Listar todas las imágenes en tu sistema | docker image ls |
docker images |
Forma corta para listar imágenes | docker images |
docker images -a |
Listar todas las imágenes incluyendo las intermedias | docker images -a |
docker pull <image>:<tag> |
Descargar una imagen desde un registro | docker pull nginx:1.27 |
docker pull <registry>/<image>:<tag> |
Extraer desde un registro privado | docker pull registry.example.com/myapp:1.0 |
docker tag <image>:<tag> <new-repo>:<new-tag> |
Crear una nueva etiqueta apuntando a una imagen | docker tag myapp:1.0 registry.example.com/myapp:latest |
docker push <image>:<tag> |
Empujar una imagen a un registro (asume que la etiqueta incluye registro) | docker push registry.example.com/myapp:1.0 |
docker login <registry> |
Autenticarse con un registro Docker | docker login docker.io |
docker logout <registry> |
Eliminar autenticación para un registro | docker logout docker.io |
docker rmi <image>:<tag> |
Eliminar una imagen local | docker rmi myapp:1.0 |
docker rmi -f <image>:<tag> |
Forzar eliminación de una imagen (incluso si está en uso) | docker rmi -f myapp:1.0 |
docker image prune |
Eliminar imágenes colgantes (sin etiqueta, no utilizadas) | docker image prune |
docker image prune -a |
Eliminar todas las imágenes no utilizadas | docker image prune -a |
docker inspect <image>:<tag> |
Mostrar información detallada sobre una imagen | docker inspect nginx:1.27 |
docker history <image>:<tag> |
Mostrar el historial de capas en una imagen | docker history myapp:1.0 |
Contenedores: ejecutar e interactuar
| Comando | Qué hace | Ejemplo |
|---|---|---|
docker run <image> |
Crear y ejecutar un contenedor desde una imagen | docker run ubuntu:latest |
docker run -d <image> |
Ejecutar un contenedor en modo desasociado (fondo) | docker run -d nginx:latest |
docker run -it <image> <command> |
Ejecutar interactivamente con una terminal | docker run -it ubuntu:latest bash |
docker run --name <name> <image> |
Dar al contenedor un nombre personalizado | docker run --name webserver nginx:latest |
docker run -p <host-port>:<container-port> <image> |
Mapear un puerto desde host a contenedor | docker run -p 8080:80 nginx:latest |
docker run -p <host-ip>:<host-port>:<container-port> <image> |
Mapear un puerto a una IP de host específica | docker run -p 127.0.0.1:8080:80 nginx:latest |
docker run -e <VAR>=<value> <image> |
Pasar una variable de entorno | docker run -e DATABASE_URL=postgres://localhost <image> |
docker run --env-file <file> <image> |
Cargar variables de entorno desde un archivo | docker run --env-file .env app:latest |
docker run -v <host-path>:<container-path> <image> |
Montar un volumen (bind mount) | docker run -v /data:/app/data app:latest |
docker run -v <volume-name>:<container-path> <image> |
Montar un volumen nombrado | docker run -v mydata:/app/data app:latest |
docker run -v <container-path> <image> |
Crear un volumen anónimo | docker run -v /app/data app:latest |
docker run --mount type=bind,source=<host>,target=<container> <image> |
Montar con sintaxis explícita (más legible) | docker run --mount type=bind,source=/data,target=/app/data app:latest |
docker run --rm <image> |
Eliminar automáticamente el contenedor cuando termina | docker run --rm ubuntu:latest echo "hello" |
docker run -w <workdir> <image> |
Establecer directorio de trabajo dentro del contenedor | docker run -w /app node:20 npm start |
docker run --user <uid>:<gid> <image> |
Ejecutar con un ID de usuario específico | docker run --user 1000:1000 app:latest |
docker run --cpus <count> <image> |
Limitar núcleos de CPU (p. ej., 0.5 para medio núcleo) |
docker run --cpus 2 app:latest |
docker run -m <memory> <image> |
Limitar memoria (p. ej., 512m, 1g) |
docker run -m 512m app:latest |
docker run --restart=<policy> <image> |
Establecer política de reinicio: no, always, on-failure, unless-stopped | docker run --restart=always nginx:latest |
docker run --restart=on-failure:<max-retries> <image> |
Reiniciar solo en caso de fallo, hasta N veces | docker run --restart=on-failure:5 app:latest |
docker run --network <network> <image> |
Conectar contenedor a una red específica | docker run --network mynet app:latest |
docker run --add-host <host>:<ip> <image> |
Añadir entradas a /etc/hosts dentro del contenedor | docker run --add-host example.com:192.168.1.10 app:latest |
docker run --cap-add <capability> <image> |
Añadir capacidades de Linux | docker run --cap-add SYS_ADMIN app:latest |
docker run --cap-drop <capability> <image> |
Eliminar capacidades de Linux | docker run --cap-drop NET_RAW app:latest |
docker run --security-opt=no-new-privileges <image> |
Prevenir escalada de privilegios | docker run --security-opt=no-new-privileges app:latest |
Inspección de contenedores y logs
| Comando | Qué hace | Ejemplo |
|---|---|---|
docker ps |
Listar contenedores en ejecución | docker ps |
docker ps -a |
Listar todos los contenedores (ejecutándose y detenidos) | docker ps -a |
docker ps -l |
Mostrar el último contenedor (más reciente) | docker ps -l |
docker container ls |
Forma larga para listar contenedores | docker container ls |
docker logs <container> |
Imprimir logs del contenedor | docker logs mycontainer |
docker logs -f <container> |
Transmitir logs continuamente (seguimiento) | docker logs -f mycontainer |
docker logs --tail <lines> <container> |
Mostrar solo las últimas N líneas | docker logs --tail 50 mycontainer |
docker logs --since <time> <container> |
Mostrar logs desde una hora específica (p. ej., 1h, 10m) |
docker logs --since 1h mycontainer |
docker logs --timestamps <container> |
Incluir marcas de tiempo en la salida | docker logs --timestamps mycontainer |
docker inspect <container> |
Mostrar configuración JSON detallada de un contenedor | docker inspect mycontainer |
docker stats |
Mostrar estadísticas en vivo de CPU, memoria, red e I/O para todos los contenedores | docker stats |
docker stats <container> |
Mostrar estadísticas para un contenedor específico | docker stats mycontainer |
docker top <container> |
Mostrar procesos en ejecución dentro de un contenedor | docker top mycontainer |
docker diff <container> |
Mostrar cambios en el sistema de archivos desde el inicio del contenedor | docker diff mycontainer |
docker port <container> |
Listar mapeos de puertos para un contenedor | docker port mycontainer |
Ciclo de vida del contenedor
| Comando | Qué hace | Ejemplo |
|---|---|---|
docker start <container> |
Iniciar un contenedor detenido | docker start mycontainer |
docker stop <container> |
Detener un contenedor en ejecución de forma correcta | docker stop mycontainer |
docker stop --time <seconds> <container> |
Esperar N segundos antes de matar (predeterminado 10) | docker stop --time 30 mycontainer |
docker kill <container> |
Forzar detención de un contenedor (SIGKILL) | docker kill mycontainer |
docker restart <container> |
Detener e iniciar un contenedor | docker restart mycontainer |
docker pause <container> |
Pausar un contenedor en ejecución (congelar procesos) | docker pause mycontainer |
docker unpause <container> |
Reanudar un contenedor en pausa | docker unpause mycontainer |
docker rm <container> |
Eliminar un contenedor detenido | docker rm mycontainer |
docker rm -f <container> |
Forzar eliminación de un contenedor en ejecución | docker rm -f mycontainer |
docker container prune |
Eliminar todos los contenedores detenidos | docker container prune |
Exec: ejecutar comandos dentro de contenedores en ejecución
| Comando | Qué hace | Ejemplo |
|---|---|---|
docker exec <container> <command> |
Ejecutar un comando dentro de un contenedor (no interactivo) | docker exec mycontainer ps aux |
docker exec -it <container> bash |
Ejecutar bash interactivamente dentro de un contenedor | docker exec -it mycontainer bash |
docker exec -it <container> sh |
Ejecutar sh (funciona en imágenes más pequeñas sin bash) | docker exec -it mycontainer sh |
docker exec -u <user> <container> <command> |
Ejecutar como un usuario específico | docker exec -u nobody mycontainer whoami |
docker exec -w <workdir> <container> <command> |
Ejecutar en un directorio de trabajo específico | docker exec -w /app mycontainer npm start |
docker exec -e <VAR>=<value> <container> <command> |
Pasar una variable de entorno para este exec | docker exec -e DEBUG=1 mycontainer app |
Volúmenes y almacenamiento persistente
| Comando | Qué hace | Ejemplo |
|---|---|---|
docker volume create <name> |
Crear un volumen nombrado | docker volume create mydata |
docker volume ls |
Listar todos los volúmenes | docker volume ls |
docker volume inspect <name> |
Mostrar información detallada sobre un volumen | docker volume inspect mydata |
docker volume rm <name> |
Eliminar un volumen | docker volume rm mydata |
docker volume prune |
Eliminar volúmenes no utilizados | docker volume prune |
docker volume prune -a |
Eliminar todos los volúmenes no utilizados (usar con cuidado) | docker volume prune -a |
Redes
| Comando | Qué hace | Ejemplo |
|---|---|---|
docker network create <name> |
Crear una red bridge personalizada | docker network create mynet |
docker network ls |
Listar todas las redes | docker network ls |
docker network inspect <name> |
Mostrar información detallada sobre una red | docker network inspect mynet |
docker network connect <network> <container> |
Adjuntar un contenedor en ejecución a una red | docker network connect mynet mycontainer |
docker network disconnect <network> <container> |
Desconectar un contenedor de una red | docker network disconnect mynet mycontainer |
docker network rm <name> |
Eliminar una red | docker network rm mynet |
docker network prune |
Eliminar redes no utilizadas | docker network prune |
Contexto (para múltiples hosts Docker)
| Comando | Qué hace | Ejemplo |
|---|---|---|
docker context ls |
Listar contextos Docker disponibles | docker context ls |
docker context create <name> --description "<desc>" --docker "host=<host>" |
Crear un nuevo contexto (p. ej., para un host remoto) | docker context create prod --docker "host=ssh://user@prod.example.com" |
docker context use <name> |
Cambiar a un contexto Docker diferente | docker context use prod |
docker context inspect <name> |
Mostrar detalles de un contexto | docker context inspect prod |
Limpieza del sistema y mantenimiento
| Comando | Qué hace | Ejemplo |
|---|---|---|
docker system prune |
Eliminar contenedores detenidos, imágenes colgantes, redes no utilizadas | docker system prune |
docker system prune -a |
Eliminar también todas las imágenes no utilizadas (no solo colgantes) | docker system prune -a |
docker system prune --volumes |
Eliminar también volúmenes no utilizados | docker system prune --volumes |
docker system df |
Mostrar uso de disco por imágenes, contenedores y volúmenes | docker system df |
docker system events |
Transmitir eventos Docker en tiempo real (pull, push, build, run, etc.) | docker system events |
Buildx: compilaciones multiplataforma
| Comando | Qué hace | Ejemplo |
|---|---|---|
docker buildx ls |
Listar controladores de construcción disponibles y plataformas | docker buildx ls |
docker buildx create --name <builder> |
Crear una nueva instancia de constructor | docker buildx create --name mybuilder |
docker buildx use <builder> |
Cambiar a un constructor | docker buildx use mybuilder |
docker buildx build --platform <platforms> -t <image>:<tag> . |
Compilar para múltiples plataformas (p. ej., linux/amd64,linux/arm64) |
docker buildx build --platform linux/amd64,linux/arm64 -t app:1.0 . |
docker buildx build --platform <platforms> --push -t <image>:<tag> . |
Compilar y empujar imagen multiplataforma a registro | docker buildx build --platform linux/amd64,linux/arm64 --push -t registry.example.com/app:1.0 . |
docker buildx build --platform <platforms> --output type=docker -t <image>:<tag> . |
Compilar para múltiples plataformas y cargar en Docker local (solo plataforma única) | docker buildx build --platform linux/amd64 --output type=docker -t app:1.0 . |
Patrones que reutilizarás
# Limpiar todo (¡usar con cuidado!)
docker system prune -a --volumes
# Construir y etiquetar para un registro en un paso
docker build -t registry.example.com/myapp:1.0 .
docker push registry.example.com/myapp:1.0
# Ejecutar un contenedor temporal, ejecutar un comando y auto-eliminar
docker run --rm ubuntu:latest dpkg -l | grep nginx
# Copiar archivos desde/hacia un contenedor
docker cp myfile.txt mycontainer:/app/myfile.txt
docker cp mycontainer:/app/output.log ./
# Obtener la dirección IP de un contenedor en ejecución
docker inspect mycontainer | grep '"IPAddress"'
# Inspeccionar una capa en una imagen
docker history myapp:1.0
# Verificar el uso de recursos de todos los contenedores
docker stats --all
# Encontrar contenedores por imagen
docker ps -a --filter ancestor=nginx:latest
Preguntas frecuentes
¿Cuál es la diferencia entre docker run y docker start?
docker run crea un nuevo contenedor desde una imagen y lo inicia; docker start reanuda un contenedor detenido. Usa run para trabajo nuevo, y start para reutilizar un contenedor detenido.
¿Cómo ejecuto un contenedor en el fondo?
Usa docker run -d <image> para desasociar. El contenedor se ejecuta en el fondo y obtienes el ID del contenedor. Usa docker logs <id> para ver la salida.
¿Cómo extraigo una imagen privada de un registro?
Primero inicia sesión con docker login -u <username> <registry>, luego docker pull <registry>/<image>:<tag>. Las credenciales se almacenan en caché localmente en ~/.docker/config.json.
¿Cómo elimino recursos Docker no utilizados?
Usa docker system prune para eliminar contenedores detenidos, imágenes no utilizadas y volúmenes colgantes. Añade -a para eliminar todas las imágenes no utilizadas (no solo colgantes), y --volumes para eliminar volúmenes no utilizados también.
¿Cómo ejecuto un comando dentro de un contenedor en ejecución?
Usa docker exec -it <container> bash (o sh para imágenes mínimas). El -i mantiene stdin abierto, y -t asigna una pseudo-terminal para interactividad.
Cómo se verificó esta guía
Escrita a mano a partir de la documentación oficial, con cada comando comprobado de nuevo y una segunda revisión antes de publicar. Última revisión: .
Fuentes oficiales consultadas para este artículo

