🐳 Docker

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Fecha de publicación

31 de agosto de 2025

Docker es una plataforma para ejecutar aplicaciones en contenedores aislados. Esta hoja de referencia contiene comandos para trabajar con imágenes, contenedores, redes, volúmenes, así como con Docker Compose y Swarm.

📦 Comandos básicos

Dominio

Ejemplo

Descripción

docker El comando principal de Docker CLI utilizado para ejecutar subcomandos y gestionar contenedores, imágenes, redes y volúmenes
docker version Mostrar la versión instalada de Docker (cliente y servidor). Útil para verificar la instalación
docker version --format '{{.Client.APIVersion}}'

Mostrar solo la versión de la API del cliente Docker

docker version --format '{{.Server.Version}}'

Mostrar solo la versión del servidor (Engine) de Docker

docker version --format '{{json .}}'

Mostrar información completa de la versión en formato JSON

docker system info Mostrar información general del sistema Docker: número de contenedores, imágenes, recursos
docker info

Mostrar datos de Docker: versiones, redes, número de contenedores e imágenes

docker info --format '{{json .}}'

Mostrar información en formato JSON — útil para la automatización

docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM'

Mostrar número de CPUs y memoria total

docker info --format '{{.Driver}}'

Mostrar el controlador de almacenamiento usado por Docker

docker image pull Descargar una imagen desde Docker Hub u otro registro. Los contenedores no pueden ejecutarse sin imágenes
docker pull ubuntu

Descargar la última imagen disponible de Ubuntu

docker pull nginx:alpine

Descargar la imagen ligera de Nginx basada en Alpine Linux

docker pull redis:7

Descargar la imagen Redis versión 7

docker container run Crear y ejecutar un nuevo contenedor a partir de una imagen
docker run -it ubuntu bash

Ejecutar Ubuntu con una terminal Bash interactiva

docker run -d nginx

Ejecutar Nginx en modo desacoplado (en segundo plano)

docker run -p 8080:80 nginx

Ejecutar Nginx y vincular el puerto 80 del contenedor al puerto 8080 del host

docker container ls Listar contenedores en ejecución
docker ps

Mostrar solo los contenedores en ejecución

docker ps -a

Mostrar todos los contenedores, incluidos los detenidos

docker ps --format '{{.Names}}'

Mostrar solo los nombres de los contenedores

docker container start Iniciar uno o más contenedores detenidos
docker start container_name

Iniciar un contenedor por nombre

docker start $(docker ps -aq)

Iniciar todos los contenedores

docker start -ai container_name

Iniciar un contenedor y adjuntar una terminal interactiva

docker container stop Detener un contenedor en ejecución
docker stop container_name

Detener un contenedor por nombre

docker stop $(docker ps -q)

Detener todos los contenedores en ejecución

docker stop -t 5 container_name

Detener un contenedor dándole 5 segundos para finalizar procesos

docker container restart Reiniciar un contenedor
docker restart container_name

Reiniciar un contenedor específico

docker restart $(docker ps -q)

Reiniciar todos los contenedores en ejecución

docker restart -t 10 container_name

Reiniciar un contenedor con un retraso de 10 segundos

docker container rm Eliminar un contenedor
docker rm container_name

Eliminar un contenedor detenido específico

docker rm $(docker ps -aq)

Eliminar todos los contenedores detenidos

docker rm -f container_name

Forzar la eliminación de un contenedor en ejecución

docker image ls Listar imágenes descargadas
docker images

Mostrar todas las imágenes en el host

docker images -a

Mostrar todas las imágenes, incluidas las capas intermedias

docker images --format '{{.Repository}}:{{.Tag}}'

Mostrar solo nombres y etiquetas de imágenes

docker image rm Eliminar una o más imágenes del almacenamiento local
docker rmi test1:latest

Eliminar la imagen con etiqueta latest del repositorio test1

docker rmi 1a2b3c4d5e6f

Eliminar una imagen por su ID

docker rmi $(docker images -q)

Eliminar todas las imágenes (¡usar con precaución!)

🔁 Gestión de contenedores

Dominio

Ejemplo

Descripción

docker container exec Ejecutar un comando dentro de un contenedor en ejecución
docker exec -it container bash

Abrir un shell bash interactivo dentro del contenedor llamado container

docker exec container ls /app

Ejecutar el comando ls en el directorio /app dentro del contenedor

docker exec -d container touch /tmp/testfile

Ejecutar un comando en el contenedor en modo desacoplado (sin esperar)

docker container logs Ver los registros del contenedor
docker logs container

Mostrar todos los registros del contenedor container

docker logs -f container

Seguir los registros del contenedor en tiempo real

docker logs --tail 50 container

Mostrar las últimas 50 líneas de registros

docker inspect Obtener información detallada en formato JSON sobre un contenedor o imagen
docker inspect container

Mostrar detalles del contenedor container

docker inspect --format '{{.NetworkSettings.IPAddress}}' container

Mostrar la dirección IP del contenedor

docker container stats Mostrar estadísticas en tiempo real del uso de recursos de los contenedores
docker stats

Mostrar uso de CPU, memoria, red y disco de todos los contenedores

docker stats container_name

Mostrar estadísticas solo de un contenedor específico

docker stats --no-stream

Mostrar una instantánea de estadísticas y salir

docker container rename Renombrar un contenedor
docker rename old_name new_name

Renombrar un contenedor de old_name a new_name

docker container cp Copiar archivos entre un contenedor y el host
docker cp container:/src/file.txt ./file.txt

Copiar un archivo desde el contenedor al directorio actual del host

docker cp ./config.yaml container:/app/config.yaml

Copiar un archivo desde el host al contenedor

docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR"

Transmitir un archivo de registro desde el contenedor y filtrar las líneas con “ERROR” sin guardarlo en disco

docker container top Mostrar procesos en ejecución dentro de un contenedor
docker top container

Mostrar procesos del contenedor llamado container

docker container pause Pausar todos los procesos en un contenedor
docker pause container

Pausar el contenedor container

docker container unpause Reanudar un contenedor pausado
docker unpause container

Reanudar el contenedor container

docker container update Actualizar configuraciones del contenedor sin reiniciar
docker update --memory 500m container

Limitar el uso de memoria del contenedor a 500 MB

🧱 Imágenes y Dockerfile

Dominio

Ejemplo

Descripción

docker buildx build Construir una imagen Docker a partir de un Dockerfile
docker build -t my_image .

Construir una imagen etiquetada como my_image desde el directorio actual

docker build -t my_image:1.0 .

Construir una imagen etiquetada con la versión 1.0

docker build --no-cache -t my_image .

Construir una imagen sin usar caché para una compilación limpia

docker container commit Crear una imagen desde el estado actual de un contenedor
docker commit container my_img:v1

Crear la imagen my_img etiquetada v1 desde el contenedor container

docker commit -m "Added config" container my_img:v2

Crear una imagen con un mensaje de commit

docker commit -a "John Doe" container my_img:latest

Crear una imagen especificando el autor

docker image tag Añadir o cambiar una etiqueta de imagen
docker tag my_image myrepo/my_image:latest

Añadir una etiqueta para enviar al registro myrepo

docker tag my_image:1.0 my_image:stable

Crear la etiqueta stable para la imagen etiquetada 1.0

docker tag my_image my_image:backup

Añadir una etiqueta backup a una imagen local

docker image push Enviar una imagen a Docker Hub u otro registro
docker push myrepo/my_image:latest

Enviar la imagen etiquetada latest al repositorio myrepo

docker push myrepo/my_image:1.0

Enviar la imagen etiquetada 1.0

docker push myrepo/my_image

Enviar la imagen con la etiqueta predeterminada latest

docker login Autenticarse en Docker Hub u otro registro
docker login

Ingresar usuario y contraseña de forma interactiva en Docker Hub

docker login myregistry.local:5000

Iniciar sesión en un registro privado

docker login -u username -p password

Iniciar sesión con usuario y contraseña (no recomendado)

docker logout Cerrar sesión en Docker Hub u otro registro
docker logout

Cerrar sesión en Docker Hub

docker logout myregistry.local:5000

Cerrar sesión en un registro privado

HEALTHCHECK Instrucción de Dockerfile para comprobar automáticamente el estado de salud del contenedor
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1

Añadir un healthcheck para verificar la disponibilidad del servicio cada 30 segundos

docker inspect --format='{{json .State.Health}}' container_name

Comprobar el estado de healthcheck de un contenedor en ejecución

🔌 Redes y Volúmenes

Dominio

Ejemplo

Descripción

docker network ls Listar todas las redes de Docker
docker network ls

Mostrar todas las redes creadas en Docker

docker network ls --filter driver=bridge

Mostrar solo las redes con el controlador bridge

docker network ls --format '{{.Name}}'

Mostrar solo los nombres de las redes

docker network create Crear una nueva red Docker
docker network create my_net

Crear una red llamada my_net con configuración predeterminada

docker network create --driver bridge my_bridge_net

Crear una red con el controlador bridge

docker network create --subnet=192.168.10.0/24 my_custom_net

Crear una red con una subred especificada

docker network connect Conectar un contenedor a una red
docker network connect my_net container

Conectar el contenedor llamado container a la red my_net

docker network connect --alias db_net my_net container

Conectar con alias db_net

docker network disconnect Desconectar un contenedor de una red
docker network disconnect my_net container

Desconectar el contenedor container de la red my_net

docker volume ls Listar todos los volúmenes de Docker
docker volume ls

Mostrar todos los volúmenes de Docker

docker volume ls --filter dangling=true

Mostrar volúmenes no utilizados

docker volume create Crear un nuevo volumen de Docker
docker volume create my_vol

Crear un volumen llamado my_vol

docker volume create --driver local --opt type=tmpfs my_tmp_vol

Crear un volumen temporal usando tmpfs

docker volume inspect Mostrar información detallada de un volumen
docker volume inspect my_vol

Mostrar detalles del volumen my_vol en formato JSON

docker volume rm Eliminar uno o más volúmenes
docker volume rm my_vol

Eliminar el volumen llamado my_vol

docker volume rm $(docker volume ls -qf dangling=true)

Eliminar todos los volúmenes no utilizados

🧩 Plugins de Docker

Dominio

Ejemplo

Descripción

docker plugin ls Listar los plugins de Docker instalados
docker plugin ls

Mostrar todos los plugins y su estado

docker plugin install Instalar un plugin de Docker desde un registro
docker plugin install vieux/sshfs

Instalar el plugin de volumen SSHFS

docker plugin install store/weaveworks/net-plugin:latest_release

Instalar el plugin de red Weave

docker plugin disable Desactivar un plugin instalado
docker plugin disable vieux/sshfs

Desactivar el plugin SSHFS

docker plugin enable Activar un plugin previamente desactivado
docker plugin enable vieux/sshfs

Activar el plugin SSHFS

docker plugin rm Eliminar un plugin de Docker
docker plugin rm vieux/sshfs

Eliminar el plugin SSHFS

📋 Docker Compose

Dominio

Ejemplo

Descripción

docker compose up Iniciar contenedores definidos en docker-compose.yml
docker compose up

Iniciar todos los servicios en el directorio actual en modo interactivo

docker compose up -d

Iniciar servicios en modo desacoplado (en segundo plano)

docker compose up --build

Construir imágenes antes de iniciar los servicios

docker compose down Detener y eliminar contenedores, redes y volúmenes creados por up
docker compose down

Detener todos los servicios en ejecución y eliminar los recursos asociados

docker compose down --volumes

Eliminar también los volúmenes creados por Compose

docker compose down --rmi all

Eliminar también las imágenes creadas por Compose

docker compose logs Ver registros de todos o de servicios específicos
docker compose logs

Mostrar registros de todos los servicios

docker compose logs -f

Seguir los registros en tiempo real

docker compose logs web

Mostrar registros solo del servicio web

docker compose exec Ejecutar un comando dentro de un contenedor de servicio en ejecución
docker compose exec web bash

Entrar en un shell bash interactivo dentro del contenedor del servicio web

docker compose exec db ls /var/lib/postgresql

Ejecutar el comando ls dentro del contenedor de la base de datos

docker compose exec -d worker touch /tmp/done

Ejecutar un comando dentro del contenedor worker en modo desacoplado

docker compose build Construir o reconstruir imágenes de servicios
docker compose build

Construir todas las imágenes definidas en docker-compose.yml

docker compose build web

Construir solo la imagen del servicio web

docker compose build --no-cache

Construir imágenes sin usar caché

docker compose ps Mostrar el estado de todos los servicios y contenedores
docker compose ps -a

Mostrar todos los contenedores, incluidos los detenidos

docker compose ps --services

Mostrar solo los nombres de los servicios

docker compose pull Descargar/actualizar imágenes de servicios desde el registro
docker compose pull web

Descargar la imagen solo para el servicio web

docker compose pull --ignore-pull-failures

Continuar la descarga incluso si algunas imágenes fallan

docker compose restart Reiniciar todos o servicios específicos
docker compose restart db

Reiniciar solo el servicio db

docker compose restart -t 10

Reiniciar servicios con un tiempo de espera de 10 segundos

docker compose config Mostrar la configuración final de Compose en formato YAML
docker compose config --services

Listar todos los servicios en la configuración

docker compose config --volumes

Listar todos los volúmenes definidos en la configuración

docker compose start Iniciar servicios detenidos sin recrear contenedores
docker compose start web

Iniciar el servicio web

docker compose start db api

Iniciar varios servicios a la vez

docker compose stop Detener servicios sin eliminar contenedores
docker compose stop web

Detener el servicio web

docker compose stop -t 5

Detener servicios con un tiempo de espera de 5 segundos

📤 Exportar e Importar

Dominio

Ejemplo

Descripción

docker image save Guardar una o más imágenes de Docker en un archivo tar para su posterior importación o transferencia
docker save -o image.tar my_img:tag

Guardar una imagen de Docker en un archivo tar

docker save my_image > my_image.tar

Forma alternativa de guardar una imagen en un archivo

docker save -o redis_latest.tar redis:latest

Guardar una imagen específica de Redis en un archivo

docker image load Cargar imágenes de Docker desde un archivo tar previamente guardado
docker load < image.tar

Cargar una imagen de Docker desde un archivo tar

docker load --input redis_latest.tar

Cargar una imagen especificando el archivo mediante parámetro

docker load --quiet < my_image.tar

Cargar una imagen sin mostrar progreso

docker container export Exportar el sistema de archivos de un contenedor como un archivo tar sin historial de imagen ni metadatos
docker export container > file.tar

Exportar el sistema de archivos del contenedor a un archivo

docker export my_container > my_container_fs.tar

Exportar un contenedor por nombre

docker export -o container_fs.tar container_id

Exportar por ID de contenedor usando la opción -o

docker image import Crear una nueva imagen a partir de un archivo tar de un sistema de archivos
docker import file.tar new_img

Importar un archivo como una nueva imagen de Docker

docker import https://example.com/image.tar my_new_image

Importar una imagen directamente desde una URL

docker import - my_image < file.tar

Importar desde la entrada estándar

🧹 Limpieza y Diagnóstico

Dominio

Ejemplo

Descripción

docker system df Mostrar uso de disco de Docker: volúmenes, imágenes, contenedores y caché de compilación
docker system df -v

Salida detallada con información de cada imagen, contenedor y volumen

docker system df --format '{{json .}}'

Mostrar información en formato JSON

docker system prune Eliminar todos los datos no utilizados de Docker: contenedores detenidos, redes no usadas, imágenes colgantes y caché de compilación
docker system prune -a

Eliminar imágenes no utilizadas incluidas las intermedias

docker system prune --volumes

Eliminar volúmenes no utilizados junto con otros recursos

docker image prune Eliminar imágenes de Docker no utilizadas, incluidas capas colgantes
docker image prune -a

Eliminar todas las imágenes no utilizadas incluidas las colgantes

docker image prune --filter "until=24h"

Eliminar imágenes con más de 24 horas

docker container prune Eliminar contenedores detenidos que coincidan con filtros o todos si no se especifica ninguno
docker container prune --filter "until=24h"

Eliminar contenedores detenidos con más de 24 horas

docker container prune --force

Eliminar sin confirmación

🐝 Docker Swarm

Dominio

Ejemplo

Descripción

docker swarm init Inicializar un nuevo clúster de Docker Swarm en el nodo actual
docker swarm init --advertise-addr 192.168.1.100

Inicializar el clúster especificando la dirección IP

docker swarm init --listen-addr 0.0.0.0:2377

Inicializar con un puerto de escucha especificado

docker service create Crear un nuevo servicio en el clúster Swarm
docker service create --name nginx nginx

Crear un servicio Nginx en Swarm

docker service create --replicas 3 --name web webserver

Crear un servicio con 3 réplicas

docker service create --name redis --publish 6379:6379 redis

Crear un servicio con mapeo de puertos

docker stack deploy Desplegar un stack de servicios en el clúster Swarm basado en un archivo Compose
docker stack deploy -c docker-compose.yml mystack

Desplegar un stack desde un archivo Compose

docker stack deploy --with-registry-auth -c compose.yml mystack

Desplegar con reenvío de autenticación de registro

docker stack deploy -c swarm-compose.yml mystack

Usar un archivo Compose alternativo para el stack

docker stack rm Eliminar uno o más stacks del clúster Swarm
docker stack rm mystack

Eliminar el stack mystack

docker stack rm

Eliminar todos los stacks (no recomendado)

docker stack rm mystack && docker swarm leave --force

Eliminar stack y salir de Swarm

💼 Uso Avanzado de Docker

🚀 Comandos Profesionales de Docker

Dominio

Ejemplo

Descripción

docker buildx Herramienta avanzada de compilación de imágenes que reemplaza docker build. Soporta multiplataforma, caché, compilaciones paralelas y exportación a varios formatos. Útil para CI/CD y desarrollo multiplataforma
docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi .

Construir una imagen multiplataforma (ARM y x86 simultáneamente)

docker buildx build --load -t localimg .

Construir una imagen y cargarla en la caché local del Docker Engine

docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest .

Construir y enviar una imagen multiplataforma a un registro

docker context Gestionar contextos de Docker para trabajar con entornos remotos o múltiples. Permite cambiar rápidamente entre Docker Engines locales y remotos
docker context create myremote --docker "host=ssh://user@host"

Crear un contexto para conectar a un host remoto de Docker

docker context use myremote

Cambiar al contexto remoto

docker context ls

Listar contextos disponibles y el activo

docker system events Escuchar eventos de Docker en tiempo real, con filtrado por tipo de evento (por ejemplo, inicio de contenedor). Útil para monitorización y automatización
docker events --filter 'event=start'

Mostrar solo eventos de inicio de contenedor

docker events --since 1h --until 10m

Mostrar eventos de la última hora hasta hace 10 minutos

docker events --filter 'type=network'

Mostrar solo eventos relacionados con la red

docker events --filter 'image=nginx'

Mostrar eventos relacionados con la imagen nginx

docker container update Cambiar límites de recursos y configuraciones de un contenedor en ejecución sin reiniciarlo
docker update --cpus 2 --memory 1g my_container

Establecer límite de 2 CPUs y 1 GB de RAM

docker update --restart unless-stopped my_container

Establecer política de reinicio automático unless-stopped

docker update --pids-limit 200 my_container

Limitar el número de procesos a 200

docker container diff Mostrar cambios en el sistema de archivos de un contenedor en comparación con su imagen original. Útil para depuración y auditoría
docker diff my_container

Mostrar todos los cambios en el sistema de archivos del contenedor

docker diff my_container | grep '^A'

Mostrar solo archivos añadidos (A — Añadido)

docker image history Mostrar el historial de capas de una imagen: comandos de compilación, tamaño de cada capa y fecha de creación. Útil para optimización y auditoría
docker history my_image

Mostrar historial de capas de una imagen

docker history --no-trunc my_image

Mostrar comandos completos de compilación sin truncar

docker history --format "{{.CreatedBy}}: {{.Size}}" my_image

Mostrar solo comandos de compilación y tamaños de capas

🛠 Prácticas útiles de Docker y Automatización

  • Minimizar el tamaño de la imagen
    Usar imágenes base como alpine o scratch para un tamaño mínimo.
    Para aplanar capas, se puede usar --squash durante la compilación (requiere activar características experimentales).
    Además, eliminar archivos temporales y cachés en una sola capa:

    RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
  • Minimizar el número de capas
    Combinar comandos en un solo RUN para reducir el número de capas y el tamaño final de la imagen:

    RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
  • Optimizar la construcción del Dockerfile
    Usar compilaciones multi-etapa para que solo los archivos necesarios permanezcan en la imagen final.
    Copiar e instalar dependencias primero y luego copiar el código — esto mejora la caché de capas y acelera las reconstrucciones.

  • Separar secretos y configuraciones
    Nunca almacenar archivos .env, claves API o certificados privados dentro de la imagen.
    Usar para la configuración:

    • docker secret (en Swarm)
    • variables de entorno (-e VAR=value o .env)
    • volúmenes externos para configuraciones

  • Secretos en tiempo de construcción (BuildKit)
    Para pasar secretos de manera segura durante la construcción, usar la opción --secret:

    docker buildx build --secret id=mysecret,src=./secret.txt .

    En Dockerfile, el secreto estará disponible en /run/secrets/mysecret:

    RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret

    🛡 Esto evita que los secretos se almacenen en las capas de la imagen.

  • Docker sin root (Rootless)
    Ejecutar Docker sin privilegios de root mejora la seguridad y reduce el riesgo de comprometer el host.
    Para habilitar:

    dockerd-rootless-setuptool.sh install
    export PATH=/usr/bin:$PATH

    Verificar:

    docker info | grep Rootless

    ⚠ Algunas funciones (ej. reenvío de puertos <1024) no estarán disponibles.

  • Escanear imágenes en busca de vulnerabilidades
    Usar herramientas integradas:

    docker scan my_image

    O la nueva CLI:

    docker scout cves my_image

    Esto ayuda a detectar vulnerabilidades en imágenes base y dependencias.

  • Monitorear el uso de recursos
    Limitar contenedores por memoria, CPU y número de procesos:

    docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage

    Esto previene el consumo excesivo de recursos.
    También se puede limitar el I/O:

    docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage

    Útil para contenedores que no deberían sobrecargar el subsistema de disco.

  • Limpieza automática
    Eliminar regularmente imágenes, contenedores, volúmenes y redes no utilizados:

    docker system prune -af --volumes

    ⚠ Cuidado: este comando elimina todos los recursos no utilizados.

    Para limpieza selectiva usar:

    docker image prune --filter "until=24h"
  • Integración con CI/CD
    Integrar construcción, pruebas y despliegue en GitHub Actions, GitLab CI, Jenkins pipelines.
    Ejemplo de paso en GitHub Actions:

    - run: docker build -t myapp:${GITHUB_SHA} .
    - run: docker push myapp:${GITHUB_SHA}
  • Registro y monitorización
    Adjuntar controladores de logs (--log-driver) a sistemas centralizados: ELK, Loki, Splunk.
    Usar Prometheus + cAdvisor para métricas de contenedores.

  • Despliegue en producción
    Separar configuraciones para desarrollo y producción usando docker-compose.override.yml.
    Para alta disponibilidad y escalado usar:

    • Docker Swarm
    • Kubernetes

🐞 Depuración y Perfilado de Contenedores Docker

Dominio

Ejemplo

Descripción

docker container exec Ejecuta un comando dentro de un contenedor en ejecución, proporcionando acceso interactivo o la capacidad de ejecutar procesos en su entorno aislado
docker exec -it my_container bash

Iniciar una terminal interactiva (bash) dentro de un contenedor en ejecución

docker exec -it my_container sh

Iniciar un shell mínimo dentro del contenedor (si bash no está disponible)

docker exec my_container ls /app

Ejecutar un comando dentro del contenedor sin modo interactivo

docker container logs Muestra los registros del contenedor especificado, permitiendo ver la salida y eventos relacionados con su operación para diagnóstico y monitorización
docker logs -f --tail 100 my_container

Ver las últimas 100 líneas de registros con transmisión en tiempo real

docker logs my_container

Mostrar todos los registros disponibles del contenedor

docker logs --since 1h my_container

Mostrar registros de la última hora

docker inspect Muestra información detallada de un objeto Docker (contenedor, imagen, red, etc.) en formato JSON, incluyendo configuración y estado
docker inspect my_container

Obtener información JSON completa del contenedor

docker inspect --format '{{.State.Pid}}' my_container

Obtener el PID del proceso principal del contenedor en el host

docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container

Mostrar la dirección IP del contenedor

nsenter (with strace) Utilidad de Linux para entrar en los espacios de nombres de otro proceso (aquí, el contenedor). Usado con strace para rastrear llamadas al sistema dentro del contenedor durante la depuración
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1

Entrar en los namespaces del contenedor y rastrear llamadas al sistema del proceso 1

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash

Abrir un shell bash dentro de los namespaces del contenedor

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp

Ver puertos abiertos dentro del contenedor

tcpdump (inside container) Herramienta de consola para capturar y analizar tráfico de red. Usada en contenedores para diagnosticar problemas de red, analizar paquetes y monitorizar conexiones
docker exec -it my_container tcpdump -i any

Capturar y analizar tráfico de red dentro del contenedor

docker exec -it my_container tcpdump -nn port 80

Capturar tráfico solo en el puerto 80

docker exec -it my_container tcpdump -w /tmp/dump.pcap

Guardar tráfico en un archivo para análisis posterior

docker container stats Muestra métricas actuales de uso de recursos (CPU, memoria, red, disco) de uno o varios contenedores en tiempo real
docker stats my_container

Mostrar en tiempo real uso de CPU, memoria, red y disco por el contenedor

docker stats

Mostrar estadísticas de todos los contenedores

docker stats --no-stream

Mostrar estadísticas una sola vez y salir

docker container top Muestra la lista de procesos ejecutándose dentro del contenedor, similar a ps en Linux, para analizar la actividad del contenedor
docker top my_container

Mostrar procesos ejecutándose dentro del contenedor

docker top my_container aux

Usar formato alternativo de salida como ps aux

docker top my_container -eo pid,cmd

Mostrar solo PID y comando de procesos

docker diff Muestra cambios en el sistema de archivos del contenedor en comparación con su imagen base, indicando archivos añadidos, modificados o eliminados
docker diff my_container

Mostrar cambios en el sistema de archivos del contenedor respecto a la imagen base

docker diff my_container | grep '^A'

Mostrar solo archivos añadidos (A — Añadido)

docker diff my_container | grep '^C'

Mostrar solo archivos modificados (C — Cambiado)

docker cp Copia archivos y directorios entre un contenedor y el host, permitiendo intercambio de datos y copias de seguridad
docker cp my_container:/path/to/file ./file

Copiar archivo del contenedor al host

docker cp ./config.yaml my_container:/app/config.yaml

Copiar archivo del host al contenedor

docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR"

Copiar archivo de log y filtrar líneas de error sin guardarlo en disco

💡 Para depuración avanzada se pueden usar nsenter, strace, tcpdump, gdb y otras herramientas de bajo nivel.

💼 Uso Avanzado de Docker Compose

🚀 Comandos Profesionales de Docker Compose

Dominio

Ejemplo

Descripción

docker compose up Inicia y gestiona el ciclo de vida de los servicios especificados desde el archivo docker-compose.yml con la posibilidad de ejecutarlos en segundo plano
docker compose up -d web db

Ejecutar solo los servicios web y db en modo desacoplado

docker compose up --build

Reconstruir imágenes antes de iniciar los servicios

docker compose up --remove-orphans

Eliminar contenedores no definidos en el archivo compose actual

docker compose build Construye imágenes para servicios según lo descrito en el archivo compose con control de caché y paralelismo
docker compose build --no-cache

Reconstruir completamente imágenes sin usar caché

docker compose build --parallel

Construir todos los servicios en paralelo para acelerar el proceso

docker compose build web

Construir solo la imagen del servicio web

docker compose pull Descarga las últimas versiones de imágenes del registro para todos o servicios específicos
docker compose pull

Descargar imágenes para todos los servicios

docker compose pull db

Descargar solo la imagen del servicio db

docker compose pull --ignore-pull-failures

Continuar la ejecución ignorando errores durante la descarga

docker compose restart Reinicia todos o servicios específicos sin recrear contenedores
docker compose restart

Reiniciar todos los servicios en el proyecto actual

docker compose restart worker

Reiniciar solo el servicio worker

docker compose restart web db

Reiniciar múltiples servicios a la vez

docker compose exec Ejecuta un comando dentro de un contenedor de servicio en ejecución con opción de modo interactivo
docker compose exec db psql -U user -d database

Ejecutar psql dentro del contenedor del servicio db

docker compose exec web sh

Abrir un shell dentro del contenedor web

docker compose exec api curl http://localhost:8080

Ejecutar una petición curl desde el contenedor del servicio api

docker compose config Muestra la configuración final de Compose considerando todos los archivos y variables de entorno
docker compose config

Mostrar configuración combinada en formato YAML

docker compose config --services

Listar todos los servicios

docker compose config --environment

Mostrar todas las variables de entorno usadas por los servicios

docker compose watch Reinicia automáticamente los servicios al cambiar archivos fuente, útil para desarrollo
docker compose watch

Iniciar observación de archivos y reiniciar servicios en cambios

docker compose events Transmitir eventos de Compose: inicio, detención, actualización de servicios
docker compose events --json

Recibir eventos en formato JSON

docker compose rm Eliminar contenedores de servicios detenidos
docker compose rm web db

Eliminar contenedores de los servicios web y db

docker compose pause Pausar la operación de servicios
docker compose pause api

Pausar el servicio api

docker compose unpause Reanudar servicios pausados
docker compose unpause api

Reanudar el servicio api

docker compose create Crear contenedores sin iniciarlos
docker compose create web db

Crear contenedores para web y db pero sin iniciarlos

docker compose images Mostrar lista de imágenes usadas por los servicios
docker compose images

Mostrar imágenes de todos los servicios

docker compose top Mostrar procesos ejecutándose dentro de contenedores de servicios
docker compose top web

Mostrar procesos dentro de los contenedores del servicio web

🛠 Prácticas útiles y Automatización con Docker Compose

  • Separación de Entornos
    Usar archivos docker-compose.override.yml separados para diferentes entornos — development, staging, production. Esto ayuda a aislar configuraciones y evitar conflictos.
    También puedes combinar múltiples archivos de configuración usando la opción -f:

    docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

    Usar diferentes archivos .env (.env.dev, .env.prod, etc.) para gestionar variables de entorno.

  • Almacenamiento Seguro de Secretos
    No incluir datos sensibles (contraseñas, tokens) directamente en archivos Compose. En su lugar, usar:

    • archivos .env para variables de entorno (tener en cuenta que no están cifrados y no deben subirse a repos públicos)
    • docker secret y docker config para secretos y configuraciones seguras en Docker Swarm
    • volúmenes externos para archivos de configuración con secretos
    • sistemas externos de gestión de secretos (ej. HashiCorp Vault, AWS Secrets Manager)

  • Orden de Inicio con depends_on y healthcheck
    Para hacer que los servicios esperen hasta que sus dependencias estén listas:

    services:
      db:
        image: postgres
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U postgres"]
          interval: 10s
          retries: 5
      api:
        image: my_api
        depends_on:
          db:
            condition: service_healthy
  • Minimizar Tiempo de Inactividad Durante Actualizaciones
    Antes de actualizar servicios, ejecutar:

    docker compose pull && docker compose up -d --remove-orphans

    La opción -d ejecuta contenedores en segundo plano, y --remove-orphans elimina contenedores no definidos en configuraciones actuales.
    Para detener y eliminar completamente contenedores antiguos si es necesario:

    docker compose down --remove-orphans

    Esto asegura que se carguen imágenes frescas y se eliminen contenedores no utilizados sin tiempo de inactividad.

  • Recarga en Caliente de Código para Desarrollo
    Usar volumes para montar directorios locales en contenedores. Esto permite aplicar cambios de código al instante sin reconstruir imágenes.
    Tener en cuenta problemas de permisos de archivos y peculiaridades de caché de sistema de archivos, especialmente en Windows y macOS, para evitar problemas de rendimiento.

  • Recarga en Caliente de Código sin Volumen (Compose 2.22+)

    develop:
      watch:
        - path: ./src
          action: sync
          target: /app
  • Registro Centralizado de Servicios
    Redirigir logs de contenedores a sistemas de monitorización y agregación como ELK Stack, Loki, Prometheus y Fluentd para análisis y alertas.
    Usar controladores de logging de Docker (--log-driver) para habilitar recopilación centralizada de logs.
    Configurar drivers de logging para contenedores en Compose:

    services:
      api:
        image: my_api
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
  • Reinicio Automático de Servicios
    Configurar política de reinicio en docker-compose.yml:

    restart: unless-stopped

    Otras políticas de reinicio incluyen:

    • no — sin reinicio automático (por defecto)
    • always — siempre reiniciar el contenedor
    • on-failure — reiniciar solo en fallos (opcional con número de reintentos)

    En producción, unless-stopped es la mejor opción para garantizar resiliencia del servicio.
    Esto habilita recuperación automática de servicios tras fallos o reinicios del host.

  • Perfiles de Servicios
    Permite ejecutar solo grupos específicos de servicios:

    services:
      db:
        image: postgres
        profiles: ["backend"]
      web:
        image: nginx
        profiles: ["frontend"]

    Para ejecutar solo el perfil frontend:

    docker compose --profile frontend up

🐞 Depuración y Perfilado de Servicios en Docker Compose

Dominio

Ejemplo

Descripción

docker compose exec Ejecuta un comando dentro de un servicio en ejecución, proporcionando acceso al contenedor o la ejecución de procesos individuales
docker compose exec web sh

Abrir un shell dentro del contenedor del servicio web

docker compose exec db psql -U user -d database

Ejecutar el comando psql dentro del contenedor del servicio db

docker compose logs Ver registros de servicios para diagnóstico y monitorización
docker compose logs -f db

Ver registros del servicio db en tiempo real

docker compose logs --tail=50 api

Mostrar las últimas 50 líneas de registros del servicio api

docker compose logs --since=1h web

Mostrar registros de la última hora del servicio web

docker inspect Ver información detallada del contenedor que ejecuta un servicio
docker inspect $(docker compose ps -q web)

Obtener JSON con información detallada del contenedor del servicio web

docker container stats Monitorear uso de recursos de contenedores de servicios en ejecución
docker stats $(docker compose ps -q worker)

Rastrear uso de CPU, memoria y otros recursos para el contenedor del servicio worker

docker compose run --rm Ejecutar un contenedor temporal con la configuración del servicio, útil para depuración
docker compose run --rm web sh

Iniciar un contenedor único para el servicio web con shell interactivo

docker container cp Copiar archivos entre host y contenedor
docker cp $(docker compose ps -q db):/dump.sql ./dump.sql

Copiar un archivo desde el contenedor del servicio db al host

💡 Para depuración cómoda de configuraciones multi-servicio complejas, usar docker compose run --rm para lanzar contenedores individuales con redes y volúmenes necesarios sin afectar los servicios principales.

📚 Recursos adicionales

🚫 Ignorar archivos con .dockerignore

Añadir archivos y carpetas al archivo .dockerignore que no deben incluirse en la imagen para reducir tamaño y acelerar la construcción:

node_modules/
*.log
.env

⚡ Simplificación de Comandos con Alias

Puedes crear alias para comandos usados frecuentemente y ejecutarlos más rápido:

alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"

🧠 Consejo: Uso de Docker

  • No intentes memorizar todo — usa docker --help o docker <command> --help para explorar comandos.
  • Practica regularmente y experimenta con proyectos simples.
  • Supervisa tamaños de imágenes y elimina archivos innecesarios con .dockerignore.

🌐 Enlaces útiles

📘 Documentación Oficial de Docker — guías y referencias completas sobre todos los temas de Docker:
https://docs.docker.com/

📙 Hoja de referencia de Docker — hoja oficial completa de referencia de comandos:
https://dockerlabs.collabnix.com/docker/cheatsheet/

📗 Docker Hub — imágenes y registros:
https://hub.docker.com/