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

Share.

Los comentarios están cerrados.