Hoja de trucos de comandos Docker
Practica comandos Docker con laboratorios prácticos
Use esta hoja de trucos de comandos Docker como referencia rápida para instalar Docker, ejecutar contenedores, gestionar imágenes, leer logs, ejecutar comandos, crear Dockerfiles, configurar volúmenes y redes, usar Docker Compose y limpiar recursos locales.
Instalación y Configuración
Instalación en Linux
Instalar Docker en sistemas Ubuntu/Debian.
# Actualizar gestor de paquetes
sudo apt update
# Instalar prerrequisitos
sudo apt install apt-transport-https ca-certificates curl
software-properties-common
# Añadir la clave GPG oficial de Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg
| sudo apt-key add -
# Añadir repositorio de Docker
sudo add-apt-repository "deb [arch=amd64]
https://download.docker.com/linux/ubuntu bionic stable"
# Instalar Docker
sudo apt update && sudo apt install docker-ce
# Iniciar servicio Docker
sudo systemctl start docker
sudo systemctl enable docker
Windows y macOS
Instalar Docker Desktop para gestión basada en GUI.
# Windows: Descargar Docker Desktop desde docker.com
# macOS: Usar Homebrew o descargar desde docker.com
brew install --cask docker
# O descargar directamente desde:
# https://www.docker.com/products/docker-desktop
Configuración Post-Instalación
Configurar Docker para uso sin root y verificar la instalación.
# Añadir usuario al grupo docker (Linux)
sudo usermod -aG docker $USER
# Cerrar sesión y volver a iniciar para cambios de grupo
# Verificar instalación de Docker
docker --version
docker run hello-world
Instalación de Docker Compose
Instalar Docker Compose para aplicaciones multi-contenedor.
# Linux: Instalar vía curl
sudo curl -L
"https://github.com/docker/compose/releases/download
/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o
/usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Verificar instalación
docker-compose --version
# Nota: Docker Desktop incluye Compose
Comandos Básicos de Docker
Información del Sistema: docker version / docker system info
Comprobar los detalles de la instalación y el entorno de Docker.
# Mostrar información de la versión de Docker
docker version
# Mostrar información del sistema Docker
information
docker system info
# Mostrar ayuda para comandos Docker
docker help
docker <comando> --help
Ejecutar Contenedores: docker run
Crear e iniciar un contenedor a partir de una imagen.
# Ejecutar un contenedor interactivamente
docker run -it ubuntu:latest bash
# Ejecutar contenedor en segundo plano
(detached)
docker run -d --name mi-contenedor
nginx
# Ejecutar con mapeo de puertos
docker run -p 8080:80 nginx
# Ejecutar con auto-eliminación después de salir
docker run --rm hello-world
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
docker run -d?Listar Contenedores: docker ps
Ver contenedores en ejecución y detenidos.
# Listar contenedores en ejecución
docker ps
# Listar todos los contenedores (incluidos los detenidos)
docker ps -a
# Listar solo IDs de contenedores
docker ps -q
# Mostrar el último contenedor creado
docker ps -l
Gestión de Contenedores
Ciclo de Vida del Contenedor: start / stop / restart
Controlar el estado de ejecución del contenedor.
# Detener un contenedor en ejecución
docker stop nombre_contenedor
# Iniciar un contenedor detenido
docker start nombre_contenedor
# Reiniciar un contenedor
docker restart nombre_contenedor
# Pausar/reanudar procesos del contenedor
docker pause nombre_contenedor
docker unpause nombre_contenedor
Ejecutar Comandos: docker exec
Ejecutar comandos dentro de contenedores en ejecución.
# Ejecutar shell bash interactiva
docker exec -it nombre_contenedor bash
# Ejecutar un solo comando
docker exec nombre_contenedor ls -la
# Ejecutar como usuario diferente
docker exec -u root nombre_contenedor whoami
# Ejecutar en directorio específico
docker exec -w /app nombre_contenedor pwd
Eliminación de Contenedores: docker rm
Eliminar contenedores del sistema.
# Eliminar un contenedor detenido
docker rm nombre_contenedor
# Eliminar forzosamente un contenedor en ejecución
docker rm -f nombre_contenedor
# Eliminar múltiples contenedores
docker rm contenedor1 contenedor2
# Eliminar todos los contenedores detenidos
docker container prune
Registros de Contenedores: docker logs
Ver la salida del contenedor y depurar problemas.
# Ver registros del contenedor
docker logs nombre_contenedor
# Seguir registros en tiempo real
docker logs -f nombre_contenedor
# Mostrar solo registros recientes
docker logs --tail 50 nombre_contenedor
# Mostrar registros con marcas de tiempo
docker logs -t nombre_contenedor
Gestión de Imágenes
Construcción de Imágenes: docker build
Crear imágenes Docker a partir de Dockerfiles.
# Construir imagen desde el directorio actual
docker build .
# Construir y etiquetar una imagen
docker build -t mi_app:latest .
# Construir con argumentos de construcción
docker build --build-arg VERSION=1.0 -t mi_app .
# Construir sin usar caché
docker build --no-cache -t mi_app .
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
docker build -t mi_app:latest .?Inspección de Imágenes: docker images / docker inspect
Listar y examinar imágenes Docker.
# Listar todas las imágenes locales
docker images
# Listar imágenes con filtros específicos
docker images nginx
# Mostrar detalles de la imagen
docker inspect nombre_imagen
# Ver historial de construcción de la imagen
docker history nombre_imagen
Operaciones de Registro: docker pull / docker push
Descargar y subir imágenes a registros.
# Descargar imagen de Docker Hub
docker pull nginx:latest
# Descargar versión específica
docker pull ubuntu:20.04
# Subir imagen al registro
docker push miusuario/mi_app:latest
# Etiquetar imagen antes de subir
docker tag mi_app:latest miusuario/mi_app:v1.0
Limpieza de Imágenes: docker rmi / docker image prune
Eliminar imágenes no utilizadas para liberar espacio en disco.
# Eliminar una imagen específica
docker rmi nombre_imagen
# Eliminar imágenes no utilizadas
docker image prune
# Eliminar todas las imágenes no utilizadas (no solo las colgantes)
docker image prune -a
# Eliminar forzosamente la imagen
docker rmi -f nombre_imagen
Conceptos Básicos de Dockerfile
Instrucciones Esenciales
Comandos principales de Dockerfile para construir imágenes.
# Imagen base
FROM ubuntu:20.04
# Establecer información del mantenedor
LABEL maintainer="usuario@ejemplo.com"
# Instalar paquetes
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# Copiar archivos del host al contenedor
COPY app.py /app/
# Establecer directorio de trabajo
WORKDIR /app
# Exponer puerto
EXPOSE 8000
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
FROM en un Dockerfile?Configuración de Ejecución
Configurar cómo se ejecuta el contenedor.
# Establecer variables de entorno
ENV PYTHON_ENV=production
ENV PORT=8000
# Crear usuario para seguridad
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser
# Definir comando de inicio
CMD ["python3", "app.py"]
# O usar ENTRYPOINT para comandos fijos
ENTRYPOINT ["python3"]
CMD ["app.py"]
# Establecer comprobación de salud
HEALTHCHECK \
CMD curl -f http://localhost:8000/ || exit 1
Docker Compose
Comandos Básicos de Compose: docker-compose up / docker-compose down
Iniciar y detener aplicaciones multi-contenedor.
# Iniciar servicios en primer plano
docker-compose up
# Iniciar servicios en segundo plano
docker-compose up -d
# Construir e iniciar servicios
docker-compose up --build
# Detener y eliminar servicios
docker-compose down
# Detener y eliminar con volúmenes
docker-compose down -v
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
docker-compose up -d?Gestión de Servicios
Controlar servicios individuales dentro de aplicaciones Compose.
# Listar servicios en ejecución
docker-compose ps
# Ver registros de un servicio
docker-compose logs nombre_servicio
# Seguir registros para todos los servicios
docker-compose logs -f
# Reiniciar un servicio específico
docker-compose restart nombre_servicio
Ejemplo de docker-compose.yml
Configuración de ejemplo para una aplicación multi-servicio.
version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
environment:
-
DATABASE_URL=postgresql://user:pass@db:5432/myapp
depends_on:
- db
volumes:
- .:/app
db:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Redes y Volúmenes
Redes de Contenedores
Conectar contenedores y exponer servicios.
# Listar redes
docker network ls
# Crear una red personalizada
docker network create mi_red
# Ejecutar contenedor en red específica
docker run --network mi_red nginx
# Conectar contenedor en ejecución a la red
docker network connect mi_red nombre_contenedor
# Inspeccionar detalles de la red
docker network inspect mi_red
Mapeo de Puertos
Exponer puertos de contenedores al sistema host.
# Mapear un solo puerto
docker run -p 8080:80 nginx
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
docker run -p 8080:80 nginx, ¿qué significan los números de puerto?# Mapear múltiples puertos
docker run -p 8080:80 -p 8443:443 nginx
# Mapear a una interfaz de host específica
docker run -p 127.0.0.1:8080:80 nginx
# Exponer todos los puertos definidos en la imagen
docker run -P nginx
Volúmenes de Datos: docker volume
Persistir y compartir datos entre contenedores.
# Crear un volumen con nombre
docker volume create mi_volumen
# Listar todos los volúmenes
docker volume ls
# Inspeccionar detalles del volumen
docker volume inspect mi_volumen
# Eliminar volumen
docker volume rm mi_volumen
# Eliminar volúmenes no utilizados
docker volume prune
Montaje de Volúmenes
Montar volúmenes con nombre y directorios del host en contenedores.
# Montar volumen con nombre
docker run -v mi_volumen:/data nginx
# Montar directorio del host (bind mount)
docker run -v /ruta/en/host:/ruta/en/contenedor nginx
# Montar directorio actual
docker run -v $(pwd):/app nginx
# Montaje de solo lectura
docker run -v /ruta/en/host:/ruta/en/contenedor:ro nginx
Inspección y Depuración de Contenedores
Detalles del Contenedor: docker inspect
Obtener información detallada sobre contenedores e imágenes.
# Inspeccionar configuración del contenedor
docker inspect nombre_contenedor
# Obtener información específica usando formato
docker inspect --format='{{.State.Status}}'
nombre_contenedor
# Obtener dirección IP
docker inspect --format='{{.NetworkSettings.IPAddress}}'
nombre_contenedor
# Obtener volúmenes montados
docker inspect --format='{{.Mounts}}' nombre_contenedor
Monitoreo de Recursos
Monitorear el uso de recursos y el rendimiento del contenedor.
# Mostrar procesos en ejecución en el contenedor
docker top nombre_contenedor
# Mostrar estadísticas de uso de recursos en vivo
docker stats
# Mostrar estadísticas para un contenedor específico
docker stats nombre_contenedor
# Monitorear eventos en tiempo real
docker events
Operaciones de Archivos: docker cp
Copiar archivos entre contenedores y el sistema host.
# Copiar archivo del contenedor al host
docker cp nombre_contenedor:/ruta/al/archivo ./
# Copiar archivo del host al contenedor
docker cp ./archivo nombre_contenedor:/ruta/al/destino
# Copiar directorio
docker cp ./directorio
nombre_contenedor:/ruta/al/destino/
# Copiar con modo archivo para preservar permisos
docker cp -a ./directorio nombre_contenedor:/ruta/
Solución de Problemas
Depurar problemas de contenedores y conectividad.
# Comprobar código de salida del contenedor
docker inspect --format='{{.State.ExitCode}}'
nombre_contenedor
# Ver procesos del contenedor
docker exec nombre_contenedor ps aux
# Probar conectividad de red
docker exec nombre_contenedor ping google.com
# Comprobar uso de disco
docker exec nombre_contenedor df -h
Registro y Autenticación
Operaciones de Docker Hub: docker login / docker search
Autenticarse e interactuar con Docker Hub.
# Iniciar sesión en Docker Hub
docker login
# Iniciar sesión en registro específico
docker login registry.ejemplo.com
# Buscar imágenes en Docker Hub
docker search nginx
# Buscar con filtro
docker search --filter stars=100 nginx
Etiquetado y Publicación de Imágenes
Preparar y publicar imágenes en registros.
# Etiquetar imagen para el registro
docker tag mi_app:latest miusuario/mi_app:v1.0
docker tag mi_app:latest
registry.ejemplo.com/mi_app:latest
# Subir a Docker Hub
docker push miusuario/mi_app:v1.0
# Subir a registro privado
docker push registry.ejemplo.com/mi_app:latest
Registro Privado
Trabajar con registros Docker privados.
# Descargar de registro privado
docker pull registry.empresa.com/mi_app:latest
# Ejecutar registro local
docker run -d -p 5000:5000 --name registro registry:2
# Subir al registro local
docker tag mi_app localhost:5000/mi_app
docker push localhost:5000/mi_app
Seguridad de Imágenes
Verificar la integridad y seguridad de las imágenes.
# Habilitar la Confianza de Contenido de Docker
export DOCKER_CONTENT_TRUST=1
# Firmar y subir imagen
docker push miusuario/mi_app:signed
# Inspeccionar firmas de imágenes
docker trust inspect miusuario/mi_app:signed
# Escanear imágenes en busca de vulnerabilidades
docker scan mi_app:latest
Limpieza y Mantenimiento del Sistema
Limpieza del Sistema: docker system prune
Eliminar recursos no utilizados de Docker para liberar espacio en disco.
# Eliminar contenedores, redes, imágenes no utilizadas
docker system prune
# Incluir volúmenes no utilizados en la limpieza
docker system prune -a --volumes
# Eliminar todo (usar con precaución)
docker system prune -a -f
# Mostrar uso de espacio
docker system df
Limpieza Dirigida
Eliminar tipos específicos de recursos no utilizados.
# Eliminar contenedores detenidos
docker container prune
# Eliminar imágenes no utilizadas
docker image prune -a
# Eliminar volúmenes no utilizados
docker volume prune
# Eliminar redes no utilizadas
docker network prune
Operaciones Masivas
Realizar operaciones en múltiples contenedores/imágenes.
# Detener todos los contenedores en ejecución
docker stop $(docker ps -q)
# Eliminar todos los contenedores
docker rm $(docker ps -aq)
# Eliminar todas las imágenes
docker rmi $(docker images -q)
# Eliminar solo imágenes colgantes (dangling)
docker rmi $(docker images -f "dangling=true" -q)
Límites de Recursos
Controlar el consumo de recursos de los contenedores.
# Limitar el uso de memoria
docker run --memory=512m nginx
# Limitar el uso de CPU
docker run --cpus="1.5" nginx
# Limitar tanto CPU como memoria
docker run --memory=1g --cpus="2.0" nginx
# Establecer política de reinicio
docker run --restart=always nginx
Configuración y Ajustes de Docker
Configuración del Daemon
Configurar el daemon de Docker para uso en producción.
# Editar configuración del daemon
sudo nano
/etc/docker/daemon.json
# Configuración de ejemplo:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
# Reiniciar servicio Docker
sudo systemctl restart docker
Variables de Entorno
Configurar el comportamiento del cliente Docker con variables de entorno.
# Establecer host de Docker
export
DOCKER_HOST=tcp://docker-remoto:2376
# Habilitar verificación TLS
export DOCKER_TLS_VERIFY=1
export
DOCKER_CERT_PATH=/ruta/a/cert
# Establecer registro predeterminado
export
DOCKER_REGISTRY=registry.empresa.com
# Salida de depuración
export DOCKER_BUILDKIT=1
Ajuste de Rendimiento
Optimizar Docker para un mejor rendimiento.
# Habilitar características experimentales
echo '{"experimental": true}' |
sudo tee
/etc/docker/daemon.json
# Opciones del controlador de almacenamiento
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check
=true"
]
}
# Configurar logging
{
"log-driver": "syslog",
"log-opts": {"syslog-address":
"udp://logs.empresa.com:514"}
}
Mejores Prácticas
Mejores Prácticas de Seguridad
Mantener sus contenedores seguros y listos para producción.
# Ejecutar como usuario no root en Dockerfile
RUN groupadd -r appuser && useradd -r -g appuser
appuser
USER appuser
# Usar etiquetas de imagen específicas, no 'latest'
FROM node:16.20.0-alpine
# Usar sistemas de archivos de solo lectura cuando sea posible
docker run --read-only nginx
Optimización del Rendimiento
Optimizar contenedores para velocidad y eficiencia de recursos.
# Usar compilaciones multi-etapa para reducir el tamaño de la imagen
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:16-alpine
WORKDIR /app
COPY /app/node_modules
./node_modules
COPY . .
CMD ["node", "server.js"]