Guía de Docker: De la
Instalación al Despliegue Profesional
Autor: Jonathan Viera
[Link]
Diapositiva 1: Introducción
¿Qué es Docker?
Docker es una plataforma que empaqueta aplicaciones y dependencias en "contenedores"
Son como cajas universales que funcionan igual en cualquier máquina
Elimina el clásico problema: "en mi PC sí funciona"
Garantiza portabilidad y consistencia entre entornos
Diapositiva 2: ¿Por qué existe Docker?
El problema clásico:
"Funciona en mi máquina"
Diferencias entre entornos (desarrollo ≠ producción)
Dependencias conflictivas entre proyectos
Configuración manual repetitiva
La solución Docker:
Analogía: Como enviar una casa prefabricada completa vs solo los planos
Todo incluido: código + dependencias + configuración
Funciona igual en cualquier lugar
Instalación de un solo comando
Diapositiva 3: Docker Desktop vs Docker Engine
¿Cuál es la diferencia?
1. Docker Engine:
Motor central que crea y ejecuta contenedores
Ligero, usado en servidores Linux
Solo línea de comandos, sin interfaz gráfica
2. Docker Desktop:
Aplicación para Windows y macOS
Incluye Docker Engine + interfaz gráfica
Utiliza máquina virtual ligera (WSL 2 / Hypervisor)
Ideal para desarrollo local
Diapositiva 4: Instalación en Windows
Requisitos Previos:
•Windows 10 (21H2+) o Windows 11
•Activar WSL 2 con un solo comando:
wsl --install
•Reiniciar el PC
Proceso:
[Link] Docker Desktop desde sitio oficial
[Link] instalador con opción "Use WSL 2"
[Link] nuevamente
[Link]: docker run hello-world
Diapositiva 5: ¿Qué es WSL?
WSL = Windows Subsystem for Linux
Linux corriendo dentro de Windows
No es una máquina virtual pesada
Permite usar herramientas de Linux en Windows
¿Por qué Docker lo necesita?
Docker nació en Linux
WSL 2 proporciona un kernel Linux real
Mejor rendimiento que Hyper-V
Integración nativa con Windows
En resumen: WSL 2 = La magia que permite Docker en Windows
Diapositiva 6: Solucionando "Unexpected WSL Error"
Causas principales:
•Problemas de permisos en WSL
•Suspensión del equipo con Docker abierto
•Actualizaciones de Windows/Docker
•WSL desactualizado
•Problemas de configuración de red
Solución más efectiva:
powershell
wsl --shutdown
Luego reiniciar Docker Desktop
Diapositiva 7: Conceptos Básicos - Imágenes
¿Qué son las Imágenes?
•Plantillas que contienen aplicación + dependencias
•Base para crear contenedores
•Se descargan desde Docker Hub
Comandos esenciales:
bash
docker images # Ver imágenes locales
docker pull ubuntu # Descargar imagen
docker rmi mi-imagen # Eliminar imagen
Diapositiva 8: Conceptos Básicos - Contenedores
¿Qué son los Contenedores?
•Instancias en ejecución de una imagen
•Pueden existir múltiples contenedores de la misma imagen
Comandos esenciales:
bash
docker ps # Contenedores activos
docker ps -a # Todos los contenedores
docker run -it ubuntu bash # Ejecutar interactivo
docker stop <contenedor> # Detener
docker rm <contenedor> # Eliminar
Diapositiva 9: El Dockerfile
La receta para crear imágenes:
Dockerfile
FROM node:20-alpine # 1. Imagen base (sistema operativo + [Link] ya instalado)
WORKDIR /app # 2. Carpeta de trabajo dentro del contenedor
COPY package*.json ./ # 3. Copiar archivos de dependencias primero (optimización)
RUN npm install # 4. Instalar dependencias
COPY . . # 5. Copiar el resto del código
EXPOSE 3000 # 6. Puerto que la app va a usar
CMD ["node", "[Link]"] # 7. Comando que ejecuta la aplicación
Beneficios:
•Automatiza la creación de imágenes
•Reproducible y versionable
•Documenta el entorno de la aplicación
Diapositiva 10: Docker Compose
Gestión simplificada de contenedores:
yaml
version: "3.8"
services:
juice-shop:
image: bkimminich/juice-shop
container_name: juice-shop
ports:
- "3000:3000"
restart: unless-stopped
Comandos:
bash
docker-compose up -d # Levantar servicios
docker-compose ps # Ver estado
docker-compose down # Detener y eliminar
Diapositiva 11: Docker Compose Complejo
Ejemplo con múltiples servicios:
PostgreSQL para base de datos
N8N para automatización
Variables de entorno configurables
Volúmenes persistentes
Red compartida entre servicios
Ventajas:
Infraestructura como código
Fácil reproducción del entorno
Escalabilidad horizontal
Diapositiva 12: ¿Qué es Docker Hub?
Docker Hub = "GitHub pero para contenedores“
¿Qué es?
•Repositorio público de imágenes Docker
•Miles de aplicaciones listas para usar
•Versiones oficiales (ubuntu, node, python, etc.)
¿Cómo funciona?
•docker pull → Descarga imagen desde Docker Hub
•docker push → Sube tu imagen a Docker Hub
•Repositorios públicos y privados
•Integración con GitHub para builds automáticos
Ejemplos:
•docker pull nginx → Servidor web listo
•docker pull postgres → Base de datos lista
Diapositiva 13: Docker Hub - Creación de Repositorio
Pasos para subir tu imagen:
[Link] repositorio en Docker Hub
[Link] visibilidad (Público/Privado)
[Link] login desde terminal:
bash
docker login
[Link] imagen correctamente
[Link] imagen al repositorio
Naming convention: usuario/nombre-app
Diapositiva 14: Flujo Profesional
Estrategia Dual: GitHub + Docker Hub
El proceso:
1.Código → GitHub (repositorio)
[Link] → Docker Hub (contenedor)
[Link] → Cualquier máquina
Comandos clave:
bash
docker build -t usuario/mi-app .
docker run -p 3000:3000 usuario/mi-app
docker push usuario/mi-app
Diapositiva 15: Instalación en Kali Linux
Comandos de instalación:
bash
# Actualizar e instalar dependencias
sudo apt update && sudo apt install -y ca-certificates curl gnupg lsb-release
# Añadir clave GPG y repositorio Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL [Link] | sudo gpg --dearmor -o /etc/apt/keyrings/[Link]
# Instalar Docker Engine
sudo apt update && sudo apt install -y docker-ce docker-ce-cli [Link]
Verificación:
bash
docker --version
sudo docker run hello-world
Diapositiva 16: OWASP Juice Shop - Opciones de Ejecución
Dos métodos principales:
Opción A - Temporal:
bash
sudo docker run --rm -p 3000:3000 bkimminich/juice-shop
•Se elimina automáticamente al cerrarse
•Ideal para pruebas rápidas
Opción B - Persistente:
bash
sudo docker run -d -p 3000:3000 --name juice-shop bkimminich/juice-shop
•Corre en segundo plano
•No se elimina al detenerse
Diapositiva 17: DVWA - Damn Vulnerable Web Application
Otra herramienta esencial para pentesting:
Docker Compose para DVWA:
yaml
services: dvwa: image: vulnerables/web-dvwa ports: - "8080:80" restart: unless-stopped
Comandos:
bash
docker-compose up -d # Levantar DVWA
Acceso:
•URL: [Link]
•Aplicación web con vulnerabilidades intencionadas
•Perfecta para practicar SQLi, XSS, CSRF, etc.
•Niveles de dificultad configurables
Diapositiva 18: N8N - Automatización Workflow
Herramienta de automatización visual:
En Docker Compose complejo encontrarás:
yaml
n8n:
image: n8nio/n8n:latest
container_name: n8n
ports:
- "5678:5678"
- environment:
- - N8N_BASIC_AUTH_ACTIVE=true
- - N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER:-admin}
- - N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD:-cambia-esta-clave}
¿Para qué sirve N8N?
•Automatizar tareas entre diferentes servicios
•Crear workflows visuales (sin código)
•Integrar APIs, bases de datos, notificaciones
•Ideal para DevOps y automatización de procesos
Diapositiva 19: Acceso y Credenciales
OWASP Juice Shop - Accesos de prueba:
Credenciales por defecto:
•Email: admin@[Link] / Password: admin123
•Email: jim@[Link] / Password: ncc-1701
Inyección SQL en login:
•Email: ' OR 1=1-- / Password: cualquiera
•Email: ' OR '1'='1 / Password: anything
Acceso local: [Link]
DVWA: [Link]
N8N: [Link]
Diapositiva 20: Script de Automatización
Build y Push automatizado:
bash
#!/bin/bash
IMAGE_NAME="usuario/mi-app"
TAG="latest"
# Build Docker Image
echo " Construyendo imagen Docker..."
docker build -t $IMAGE_NAME:$TAG .
# Push to Docker Hub
echo " Enviando a Docker Hub..."
docker push $IMAGE_NAME:$TAG
echo " Imagen enviada: $IMAGE_NAME:$TAG“
Pasos de ejecución:
[Link] como archivo .sh
[Link] permisos: chmod +x [Link]
[Link]: ./[Link]
Diapositiva 21: Comandos de Limpieza
Mantenimiento del sistema:
bash
docker image prune # Eliminar imágenes sin etiqueta
docker volume prune # Eliminar volúmenes sin usar
docker builder prune # Limpiar cachés de construcción
Inspección y debug:
bash
docker ps # Contenedores activos
docker logs container-name # Ver logs del contenedor
docker exec -it container bash # Acceder al contenedor
Diapositiva 22: Caso Práctico - Dockerizando Herramientas
Dockerizar herramientas de GitHub: "kickthemout" (para desconectar dispositivos de red)
dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3 git nmap
RUN git clone [Link]
WORKDIR /kickthemout
RUN pip3 install -r [Link]
CMD ["python3", "[Link]"]
Beneficios:
No instalas dependencias en tu sistema principal
Pruebas seguras en entorno aislado
Eliminas todo fácilmente cuando termines
Funciona igual en cualquier máquina
Diapositiva 23: Despliegue en la Nube
Alternativas estables a [Link]:
1. [Link]
Detecta Dockerfile automáticamente
Deploy con cada git push
Interfaz muy intuitiva
2. [Link]
Servidores globales distribuidos
Perfecto para APIs
Configuración más avanzada
3. Vercel
Ideal para frontend y [Link]
Integración perfecta con GitHub
Diapositiva 24: Actualización de Herramientas
Mantener el entorno actualizado:
[Link]:
bash
# Windows - Descargar desde [Link]
node -v
# Linux/Mac con n:
sudo npm install -g n
sudo n stable
NPM:
bash
npm install -g npm@latest
npm -v
Git:
bash
# Windows: git update-git-for-windows
# Linux: sudo apt update && sudo apt install git
git --version
Diapositiva 25: Docker en el Mundo Real
¿Quién usa Docker en producción?
Gigantes tecnológicos:
Netflix: 700+ microservicios en contenedores
Uber: Maneja millones de viajes diarios con Docker
Spotify: Despliega código 10,000 veces por día
¿Por qué las empresas lo adoptan?
Escalabilidad: De 1 a 1000 contenedores automáticamente
Microservicios: Cada servicio en su propio contenedor
CI/CD: Deploy automático con cada commit
Costos: Mejor uso de recursos del servidor
DevOps: Misma imagen en desarrollo y producción
Casos de uso reales:
E-commerce con picos de tráfico
APIs que necesitan escalar dinámicamente
Aplicaciones que requieren diferentes versiones de librerías
Diapositiva 26: Conclusión
Docker: Tu nueva superpotencia de desarrollo
Beneficios clave:
Portabilidad total entre entornos
Aislamiento y seguridad
Reproducibilidad garantizada
Escalabilidad profesional
Flujo de trabajo moderno
Próximos pasos:
Practicar con proyectos reales
Explorar orquestación (Kubernetes)
Implementar CI/CD pipelines
¡Empieza a dockerizar todo!
Diapositiva 27: Buenas Prácticas con Docker
•Mantener imágenes ligeras (usar Alpine siempre que sea posible)
•Evitar usar latest en producción, especificar versiones
•No guardar secretos en Dockerfiles (usar variables de entorno seguras)
•Limpiar imágenes y volúmenes innecesarios regularmente
•Monitorear contenedores con herramientas como Portainer o cAdvisor
Diapositiva 28: Recursos de Aprendizaje y Comunidad
• Documentación oficial: [Link]
• Cursos: Docker Mastery (Udemy), FreeCodeCamp, Kubernetes by Example
• Comunidad:
•Docker Community Slack
•Foros en Stack Overflow y GitHub
•Meetups locales y conferencias (DockerCon)
• Siguiente paso: profundizar en Kubernetes para orquestación