🐳 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 trucos contiene comandos para trabajar con imágenes, contenedores, redes, volúmenes, así como Docker Compose y Swarm.

📦 Comandos básicos

Comando

Ejemplo

Descripción

docker El comando principal de la CLI de Docker usado para ejecutar subcomandos y administrar 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 info en formato JSON — útil para 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 de Redis versión 7

docker container run Crear y ejecutar un nuevo contenedor desde 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 enlazar el puerto 80 del contenedor al puerto 8080 del host

docker container ls Listar contenedores en ejecución
docker ps

Mostrar solo contenedores en ejecución

docker ps -a

Mostrar todos los contenedores, incluidos los detenidos

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

Mostrar solo nombres de 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 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 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 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 imagen con etiqueta latest del repositorio test1

docker rmi 1a2b3c4d5e6f

Eliminar imagen por su ID

docker rmi $(docker images -q)

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

🔁 Administración de contenedores

Comando

Ejemplo

Descripción

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

Iniciar una shell bash interactiva 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 logs del contenedor
docker logs container

Mostrar todos los logs del contenedor container

docker logs -f container

Seguir logs del contenedor en tiempo real

docker logs --tail 50 container

Mostrar las últimas 50 líneas de logs

docker inspect Obtener información detallada en 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 de uso de recursos en tiempo real de contenedores
docker stats

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

docker stats container_name

Mostrar estadísticas solo de un contenedor específico

docker stats --no-stream

Mostrar una captura única de estadísticas y salir

docker container rename Renombrar un contenedor
docker rename old_name new_name

Renombrar 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 del contenedor al directorio actual del host

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

Copiar un archivo del host al contenedor

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

Transmitir un archivo de log del contenedor y filtrar líneas “ERROR” sin guardar 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 de un contenedor sin reiniciar
docker update --memory 500m container

Limitar uso de memoria del contenedor a 500 MB

🧱 Imágenes y Dockerfile

Comando

Ejemplo

Descripción

docker buildx build Construir una imagen Docker desde un Dockerfile
docker build -t my_image .

Construir una imagen etiquetada 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 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 Agregar o cambiar una etiqueta de imagen
docker tag my_image myrepo/my_image:latest

Agregar una etiqueta para enviar al registro myrepo

docker tag my_image:1.0 my_image:stable

Crear etiqueta stable para la imagen etiquetada 1.0

docker tag my_image my_image:backup

Agregar 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 imagen etiquetada latest al repositorio myrepo

docker push myrepo/my_image:1.0

Enviar imagen etiquetada 1.0

docker push myrepo/my_image

Enviar imagen con etiqueta predeterminada latest

docker login Autenticarse en Docker Hub u otro registro
docker login

Ingresar usuario y contraseña de forma interactiva para 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 registro privado

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

Agregar health check para verificar disponibilidad del servicio cada 30 segundos

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

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

🔌 Redes y volúmenes

Comando

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 redes con el driver bridge

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

Mostrar solo nombres de redes

docker network create Crear una nueva red de 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 driver 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 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

Comando

Ejemplo

Descripción

docker plugin ls Listar 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 Deshabilitar un plugin instalado
docker plugin disable vieux/sshfs

Deshabilitar el plugin SSHFS

docker plugin enable Habilitar un plugin previamente deshabilitado
docker plugin enable vieux/sshfs

Habilitar el plugin SSHFS

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

Eliminar el plugin SSHFS

📋 Docker Compose

Comando

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 (segundo plano)

docker compose up --build

Construir imágenes antes de iniciar 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 recursos asociados

docker compose down --volumes

Eliminar también volúmenes creados por Compose

docker compose down --rmi all

Eliminar también imágenes creadas por Compose

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

Mostrar logs de todos los servicios

docker compose logs -f

Seguir logs en tiempo real

docker compose logs web

Mostrar logs 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 una shell bash interactiva dentro del contenedor del servicio web

docker compose exec db ls /var/lib/postgresql

Ejecutar comando ls dentro del contenedor de 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 nombres de servicios

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

Descargar imagen solo para el servicio web

docker compose pull --ignore-pull-failures

Continuar descargando incluso si algunas imágenes fallan

docker compose restart Reiniciar todos o servicios especificados
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 múltiples 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

Comando

Ejemplo

Descripción

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

Guardar una imagen 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 Docker desde un archivo tar guardado previamente
docker load < image.tar

Cargar una imagen Docker desde un archivo tar

docker load --input redis_latest.tar

Cargar una imagen especificando el archivo por 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 archivo tar sin historial ni metadatos
docker export container > file.tar

Exportar sistema de archivos del contenedor a un archivo

docker export my_container > my_container_fs.tar

Exportar 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 desde un archivo tar de un sistema de archivos
docker import file.tar new_img

Importar archivo como nueva imagen Docker

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

Importar imagen directamente desde una URL

docker import - my_image < file.tar

Importar desde entrada estándar

🧹 Limpieza y diagnósticos

Comando

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 Docker no utilizados: contenedores detenidos, redes sin uso, 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 Docker no utilizadas incluidas las 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 de más de 24 horas

docker container prune Eliminar contenedores detenidos según filtros o todos si no se especifican
docker container prune --filter "until=24h"

Eliminar contenedores detenidos con más de 24 horas

docker container prune --force

Eliminar sin pedir confirmación

🐝 Docker Swarm

Comando

Ejemplo

Descripción

docker swarm init Inicializar un nuevo clúster 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 stack desde archivo compose

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

Desplegar con reenvío de autenticación del 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

Comando

Ejemplo

Descripción

docker buildx Herramienta avanzada de construcció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 conectarse 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 (ej. inicio de contenedor). Útil para monitoreo y automatización
docker events --filter 'event=start'

Mostrar solo eventos de inicio de contenedores

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 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 en 2 CPUs y 1 GB RAM

docker update --restart unless-stopped my_container

Establecer política de reinicio automático a 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 comparado 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 — Added)

docker image history Mostrar el historial de capas de la imagen: comandos de construcción, tamaño de cada capa y tiempo 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 todos los comandos de construcción sin truncar

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

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

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

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

    RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
  • Minimizar 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 construcción del Dockerfile
    Usar compilaciones multi-etapa para que solo los archivos necesarios queden en la imagen final.
    Copiar e instalar dependencias primero, luego copiar el código — esto mejora el caché de capas y acelera reconstrucciones.

  • Separar secretos y configuraciones
    Nunca almacenar archivos .env, llaves API o certificados privados dentro de la imagen.
    Usar para 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 forma 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 capas de la imagen.

  • Docker sin root
    Ejecutar Docker sin privilegios de root mejora la seguridad y reduce el riesgo de compromiso del 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 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 E/S:

    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 CI/CD
    Incorporar construcción, pruebas y despliegue en GitHub Actions, GitLab CI, pipelines de Jenkins.
    Ejemplo de paso en GitHub Actions:

    - run: docker build -t myapp:${GITHUB_SHA} .
    - run: docker push myapp:${GITHUB_SHA}
  • Registro y monitoreo
    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 escalamiento usar:

    • Docker Swarm
    • Kubernetes

🐞 Depuración y perfilado de contenedores Docker

Comando

Ejemplo

Descripción

docker container exec Ejecuta un comando dentro de un contenedor en ejecución, proporcionando acceso interactivo o la posibilidad de ejecutar procesos en el entorno aislado del contenedor
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 una shell mínima 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 logs del contenedor especificado, permitiendo ver la salida y eventos relacionados con su operación para diagnóstico y monitoreo
docker logs -f --tail 100 my_container

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

docker logs my_container

Mostrar todos los logs disponibles del contenedor

docker logs --since 1h my_container

Mostrar logs de la última hora

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

Obtener información completa en JSON sobre el 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). Se usa con strace para rastrear llamadas al sistema dentro del contenedor para depuración
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1

Entrar en espacios de nombres 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 una shell bash dentro de los espacios de nombres 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 el contenedor para diagnosticar problemas de red, analizar paquetes y monitorear 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 archivo para análisis posterior

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

Mostrar uso en tiempo real de CPU, memoria, red y disco del 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 que se ejecutan dentro del contenedor, similar a ps en Linux, para analizar la actividad del contenedor
docker top my_container

Mostrar procesos en ejecución dentro del contenedor

docker top my_container aux

Usar formato de salida alternativo 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 comparado con su imagen base, indicando archivos añadidos, modificados o eliminados
docker diff my_container

Mostrar cambios en el sistema de archivos del contenedor comparado con la imagen base

docker diff my_container | grep '^A'

Mostrar solo archivos añadidos (A — Added)

docker diff my_container | grep '^C'

Mostrar solo archivos modificados (C — Changed)

docker cp Copia archivos y directorios entre un contenedor y el host, permitiendo intercambio de datos y respaldo
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 logs y filtrar líneas de error sin guardar 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

Comando

Ejemplo

Descripción

docker compose up Inicia y gestiona el ciclo de vida de 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 servicios

docker compose up --remove-orphans

Eliminar contenedores no definidos en el archivo compose actual

docker compose build Construye imágenes para servicios descritos 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 de manera concurrente 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 desde el registro para todos o servicios específicos
docker compose pull

Descargar imágenes de todos los servicios

docker compose pull db

Descargar imagen solo para el servicio db

docker compose pull --ignore-pull-failures

Continuar ejecución ignorando errores durante la descarga de imágenes

docker compose restart Reinicia todos o servicios especificados sin recrear contenedores
docker compose restart

Reiniciar todos los servicios del 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 Ejecutar un comando dentro de un contenedor de servicio en ejecución con modo interactivo opcional
docker compose exec db psql -U user -d database

Ejecutar psql dentro del contenedor del servicio db

docker compose exec web sh

Abrir una shell dentro del contenedor web

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

Ejecutar petición curl desde el contenedor del servicio api

docker compose config Mostrar 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 Reiniciar automáticamente servicios al cambiar archivos fuente, útil para desarrollo
docker compose watch

Comenzar a vigilar archivos y reiniciar servicios al cambiar

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 operación de un servicio
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 no iniciarlos

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

Mostrar imágenes de todos los servicios

docker compose top Mostrar procesos en ejecución dentro de contenedores de servicios
docker compose top web

Mostrar procesos dentro de 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 se pueden 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 los archivos Compose. En su lugar, usar:

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

  • Orden de inicio con depends_on y healthcheck
    Para que servicios esperen a que 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 nuevas y contenedores no usados sean eliminados 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.
    Prestar atención a problemas de permisos de archivos y peculiaridades de caché del sistema de archivos, especialmente en Windows y macOS.

  • Recarga en caliente sin volumen (Compose 2.22+)

    develop:
      watch:
        - path: ./src
          action: sync
          target: /app
  • Registro centralizado de servicios
    Redirigir logs de contenedores a sistemas de monitoreo y agregación como ELK Stack, Loki, Prometheus y Fluentd para análisis y alertas.
    Usar drivers de logging de Docker (--log-driver) para habilitar recolecció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 contenedor
    • on-failure — reiniciar solo en fallos (opcionalmente con número de reintentos)

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

  • Perfiles de servicios
    Permiten 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

Comando

Ejemplo

Descripción

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

Abrir una 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 logs de servicios para diagnóstico y monitoreo
docker compose logs -f db

Ver logs del servicio db en tiempo real

docker compose logs --tail=50 api

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

docker compose logs --since=1h web

Mostrar logs de la última hora del servicio web

docker inspect Ver información detallada sobre el 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 que ejecutan servicios
docker stats $(docker compose ps -q worker)

Seguir uso de CPU, memoria y otros recursos del contenedor del servicio worker

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

Iniciar un contenedor de una sola vez para el servicio web con una shell interactiva

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

Copiar un archivo del contenedor del servicio db al host

💡 Para depuración conveniente de configuraciones complejas con múltiples servicios, usar docker compose run --rm para iniciar contenedores individuales con redes y volúmenes necesarios sin afectar servicios principales.

📚 Recursos adicionales

🚫 Ignorar archivos con .dockerignore

Agregar 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

⚡ Simplificar 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"

🧠 Tip: Consejos de uso de Docker

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

🌐 Enlaces útiles

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

📙 Docker Cheat Sheet — hoja de trucos oficial completa de Docker:
https://dockerlabs.collabnix.com/docker/cheatsheet/

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