Bienvenido al repositorio de demostración de Docker para estudiantes de AWS Skills Centers. Este proyecto te enseñará los fundamentos de Docker y la orquestación de contenedores, preparándote para comprender servicios como AWS ECS (Elastic Container Service).
🎓 Recurso Educativo Gratuito | Creado para AWS Skills Centers | ⭐ Si te gusta, dale una estrella
Este proyecto es parte del ecosistema educativo de AWS Skills Centers, donde ofrecemos:
- ✅ Formación 100% GRATUITA en tecnologías cloud
- ✅ Clases presenciales y virtuales con instructores certificados
- ✅ Desde nivel principiante hasta avanzado
- ✅ Sin requisitos previos - ¡todos son bienvenidos!
📍 Ubicaciones: Seattle, Arlington, Ciudad del Cabo
🌐 Clases virtuales en español: Ahora disponible para toda LATAM con Bootcamp Institute
🚀 Regístrate GRATIS: aws.amazon.com/es/training/skills-centers
Aplicación web con animación de gradiente y diseño moderno inspirado en AWS ☁️
Este demo está diseñado en dos partes progresivas:
graph LR
A[🎓 Inicio] --> B[📦 Parte 1<br/>Docker Básico]
B --> C[🎭 Parte 2<br/>Orquestación]
C --> D[☁️ Conceptos<br/>AWS ECS]
D --> E[🚀 Producción<br/>en la Nube]
style A fill:#FF9900,stroke:#232F3E,stroke-width:2px,color:#fff
style B fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style C fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style D fill:#232F3E,stroke:#FF9900,stroke-width:2px,color:#fff
style E fill:#FF9900,stroke:#232F3E,stroke-width:2px,color:#fff
Aprenderás a trabajar con un solo contenedor, entendiendo los conceptos fundamentales:
- 📦 Construcción de imágenes
- 🚀 Ejecución de contenedores
- 🔧 Gestión manual de contenedores
- 🔌 Mapeo de puertos
- ♻️ Ciclo de vida de contenedores
Aprenderás cómo un orquestador simplifica la gestión de múltiples contenedores:
- 📝 Definición declarativa de servicios
- 🎯 Gestión de múltiples contenedores como una unidad
- 🌐 Networking automático entre contenedores
- ⚖️ Escalabilidad y dependencias
- ☁️ Fundamentos para entender AWS ECS
💡 ¿Por qué esto es importante? Docker Compose te enseña los conceptos de orquestación que luego verás en AWS ECS, pero todo de forma local, sin costos y sin necesidad de cuenta AWS.
Orquestación es la gestión automatizada, coordinación y organización de múltiples contenedores. Un orquestador:
- 🎭 Gestiona el ciclo de vida de múltiples contenedores
- 🔗 Configura las redes entre contenedores automáticamente
- ⚖️ Balancea la carga y escala servicios
- 🔄 Reinicia contenedores si fallan
- 📦 Define dependencias entre servicios
graph TB
subgraph "🎭 Orquestador Docker Compose / AWS ECS"
O[Orquestador]
end
subgraph "🌐 Red Virtual"
C1[📦 Contenedor 1<br/>Frontend]
C2[📦 Contenedor 2<br/>Backend]
C3[📦 Contenedor 3<br/>Database]
end
O -->|Gestiona| C1
O -->|Gestiona| C2
O -->|Gestiona| C3
O -->|Configura Red| C1
O -->|Configura Red| C2
O -->|Configura Red| C3
C1 -.->|Comunica| C2
C2 -.->|Comunica| C3
style O fill:#FF9900,stroke:#232F3E,stroke-width:3px,color:#fff
style C1 fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style C2 fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style C3 fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
Docker Compose es un orquestador simple para ambientes locales.
AWS ECS es un orquestador empresarial en la nube que usa los mismos conceptos.
Antes de comenzar, asegúrate de tener instalado:
- Docker Desktop (versión 20.10 o superior)
Para verificar la instalación:
docker --version
docker-compose --versionUna imagen es una plantilla inmutable que contiene tu aplicación y todas sus dependencias.
graph LR
A[📄 Dockerfile] -->|docker build| B[📦 Imagen<br/>aws-skills-centers-demo:v1]
B -->|docker run| C[🏃 Contenedor<br/>En ejecución]
style A fill:#232F3E,stroke:#FF9900,stroke-width:2px,color:#fff
style B fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style C fill:#FF9900,stroke:#232F3E,stroke-width:2px,color:#fff
# Navega al directorio del proyecto
cd docker-demo
# Construye la imagen desde el Dockerfile
docker build -t aws-skills-centers-demo:v1 .¿Qué hace este comando?
- 🏗️
build: Construye una nueva imagen - 🏷️
-t: Asigna un nombre (tag) a la imagen - 📛
aws-skills-centers-demo:v1: Nombre y versión de la imagen - 📂
.: Usa el Dockerfile del directorio actual
Verifica que la imagen se creó:
docker imagesDeberías ver algo como:
REPOSITORY TAG IMAGE ID CREATED SIZE
aws-skills-centers-demo v1 abc123def456 2 seconds ago 24.5MB
Un contenedor es una instancia en ejecución de una imagen.
# Ejecuta el contenedor
docker run -d -p 8080:80 --name aws-skills-centers-web aws-skills-centers-demo:v1¿Qué hace este comando?
run: Crea y ejecuta un contenedor-d: Modo "detached" (segundo plano)-p 8080:80: Mapea el puerto 8080 del host al puerto 80 del contenedor--name: Asigna un nombre al contenedoraws-skills-centers-demo:v1: La imagen a usar
Abre tu navegador y visita: http://localhost:8080
Deberías ver una hermosa página con animación de gradiente y mensaje motivacional.
docker psSalida esperada:
CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES
abc123def456 aws-skills-centers-demo:v1 "/docker-entrypoint.…" Up 2 minutes 0.0.0.0:8080->80/tcp aws-skills-centers-web
docker logs aws-skills-centers-web
# Ver logs en tiempo real (Ctrl+C para salir)
docker logs -f aws-skills-centers-webdocker inspect aws-skills-centers-webdocker exec -it aws-skills-centers-web sh
# Una vez dentro, puedes explorar:
ls -la /usr/share/nginx/html/
cat /usr/share/nginx/html/index.html
exitdocker stop aws-skills-centers-webdocker ps -aEl STATUS mostrará "Exited"
docker start aws-skills-centers-web# Primero detenlo si está corriendo
docker stop aws-skills-centers-web
# Luego elimínalo
docker rm aws-skills-centers-webCon Docker básico, para gestionar múltiples contenedores tendrías que:
graph TB
subgraph "❌ Sin Orquestador - Manual y Complejo"
A[👤 Tú] -->|docker run| C1[Contenedor 1]
A -->|docker run| C2[Contenedor 2]
A -->|docker run| C3[Contenedor 3]
A -->|docker network| N[Red Manual]
A -.->|Monitorear| C1
A -.->|Monitorear| C2
A -.->|Monitorear| C3
A -.->|Reiniciar| C1
end
style A fill:#ff6b6b,stroke:#c92a2a,stroke-width:2px,color:#fff
style C1 fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style C2 fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style C3 fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style N fill:#adb5bd,stroke:#495057,stroke-width:2px
❌ Ejecutar múltiples comandos docker run manualmente
❌ Configurar las redes entre contenedores manualmente
❌ Gestionar el orden de inicio de los servicios
❌ Reiniciar cada contenedor individualmente si algo falla
❌ Recordar todos los parámetros de cada contenedor
Solución: ¡Necesitamos un ORQUESTADOR! 🎭
Docker Compose es un orquestador de contenedores que te permite:
✅ Definir múltiples servicios en un solo archivo (YAML)
✅ Levantar toda tu aplicación con un solo comando
✅ Gestionar redes y volúmenes automáticamente
✅ Escalar servicios fácilmente
✅ Definir dependencias entre servicios
Es similar a AWS ECS, pero para tu máquina local.
Para demostrar la orquestación, vamos a desplegar:
graph TB
subgraph "🎭 Docker Compose - Orquestador"
DC[docker-compose.yml]
end
subgraph "☁️ Aplicación Desplegada"
F[🌐 Frontend<br/>Nginx + App Web<br/>Puerto: 8080]
B[🔧 Backend API<br/>Endpoints REST<br/>Puerto: 3000]
D[🗄️ Database<br/>Redis Cache<br/>Puerto: 6379]
end
U[👥 Usuarios] -->|HTTP| F
F -.->|API Calls| B
B -.->|Cache| D
DC -->|Gestiona| F
DC -->|Gestiona| B
DC -->|Gestiona| D
style DC fill:#FF9900,stroke:#232F3E,stroke-width:3px,color:#fff
style F fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style B fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style D fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style U fill:#232F3E,stroke:#FF9900,stroke-width:2px,color:#fff
Con un SOLO comando (docker-compose up), el orquestador:
- ✅ Construye todas las imágenes
- ✅ Crea la red virtual
- ✅ Inicia los servicios en orden
- ✅ Gestiona la comunicación entre ellos
Ya tenemos los archivos preparados:
docker-compose.yml- Define TODOS los serviciosindex.html,styles.css,script.js- Frontendapi/- Backend (lo crearemos ahora)
Con un SOLO COMANDO, Docker Compose:
- Construye las imágenes necesarias
- Crea una red para los contenedores
- Inicia todos los servicios en el orden correcto
- Configura el networking automáticamente
docker-compose up -d¿Qué hace este comando?
up: Inicia todos los servicios-d: Modo detached (segundo plano)
docker-compose psSalida esperada:
NAME STATUS PORTS
aws-skills-centers-web running 0.0.0.0:8080->80/tcp
docker-compose logs
# Ver logs en tiempo real
docker-compose logs -f
# Ver logs de un servicio específico
docker-compose logs aws-skills-centers-demoAbre tu navegador: http://localhost:8080
La aplicación ahora está siendo gestionada por el orquestador.
Abre docker-compose.yml y observa:
version: '3.8'
services:
# Cada "service" es un contenedor
aws-skills-centers-demo:
build: .
ports:
- "8080:80"
restart: unless-stopped # ¡El orquestador reinicia si falla!
deploy:
resources: # Control de recursos
limits:
cpus: '0.5'
memory: 128M
networks:
default:
name: aws-skills-centers-network # Red automáticaVentajas del Orquestador:
- ✅ Configuración declarativa (describes QUÉ quieres, no CÓMO)
- ✅ Reproducible (mismo resultado siempre)
- ✅ Versionable (puedes guardarlo en Git)
- ✅ Documentación como código
# Escalar a 3 instancias del servicio
docker-compose up -d --scale aws-skills-centers-demo=3
⚠️ Nota: Para que esto funcione correctamente con puertos, necesitarías un load balancer. En AWS ECS, esto se hace automáticamente con ALB (Application Load Balancer).
Edita index.html y cambia el mensaje.
docker-compose up -d --buildEl orquestador:
- Reconstruye la imagen
- Detiene el contenedor viejo
- Inicia el contenedor nuevo
- Mantiene el servicio disponible
# Detener todos los servicios
docker-compose stop
# Detener Y eliminar contenedores, redes
docker-compose down
# Detener, eliminar Y borrar imágenes
docker-compose down --rmi all
# Eliminar también volúmenes
docker-compose down -vCon un solo comando gestionas toda tu aplicación.
graph LR
A[🎓 Aprender<br/>Docker Básico] --> B[🎭 Practicar<br/>Docker Compose]
B --> C[☁️ Producción<br/>AWS ECS]
A -.->|1 contenedor| A1[Local]
B -.->|Múltiples contenedores| B1[Local]
C -.->|Múltiples contenedores| C1[Nube AWS]
style A fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style B fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style C fill:#FF9900,stroke:#232F3E,stroke-width:2px,color:#fff
| Aspecto | Docker Básico | Docker Compose | AWS ECS |
|---|---|---|---|
| 🎯 Ámbito | 1 contenedor | Múltiples contenedores locales | Múltiples contenedores en la nube |
| ⌨️ Comandos | Múltiples docker run |
Un docker-compose up |
Definición de Task + Service |
| 🌐 Networking | Manual | Automático (local) | Automático (VPC, ALB) |
| ⚖️ Escalado | Manual | --scale |
Auto Scaling Groups |
| 🔄 Alta disponibilidad | No | Limitada | Sí (multi-AZ) |
| ♻️ Reinicio automático | Con --restart |
Con restart: always |
Automático |
| ⚡ Load Balancer | No | No (necesitas nginx) | ALB/NLB integrado |
| 💰 Costo | Gratis (local) | Gratis (local) | Pagas por recursos AWS |
| 📝 Configuración | Línea de comandos | docker-compose.yml |
Task Definitions (JSON) |
Al aprender Docker Compose, entiendes estos conceptos que se traducen directamente a ECS:
graph LR
subgraph "💻 Local - Docker Compose"
A1[service]
A2[docker-compose up]
A3[networks]
A4[deploy.resources]
end
subgraph "☁️ AWS - ECS"
B1[Task Definition]
B2[Service]
B3[VPC + Security Groups]
B4[Task CPU/Memory]
end
A1 -.->|Mismo concepto| B1
A2 -.->|Mismo concepto| B2
A3 -.->|Mismo concepto| B3
A4 -.->|Mismo concepto| B4
style A1 fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style A2 fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style A3 fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style A4 fill:#146EB4,stroke:#232F3E,stroke-width:2px,color:#fff
style B1 fill:#FF9900,stroke:#232F3E,stroke-width:2px,color:#fff
style B2 fill:#FF9900,stroke:#232F3E,stroke-width:2px,color:#fff
style B3 fill:#FF9900,stroke:#232F3E,stroke-width:2px,color:#fff
style B4 fill:#FF9900,stroke:#232F3E,stroke-width:2px,color:#fff
| Docker Compose | AWS ECS | Concepto |
|---|---|---|
📝 service |
☁️ Task Definition | Cómo correr un contenedor |
🚀 docker-compose up |
⚡ Service | Instancia corriendo |
🌐 networks |
🔒 VPC + Security Groups | Networking |
⏱️ depends_on |
🔗 Service Dependencies | Orden de inicio |
💾 deploy.resources |
📊 Task CPU/Memory | Límites de recursos |
📈 replicas |
🎯 Desired Count | Cuántas instancias |
| 💻 Host local | ☁️ ECS Cluster | Dónde corren los contenedores |
- Ejercicio 1: Construye una imagen con un tag diferente
v2 - Ejercicio 2: Ejecuta el contenedor en el puerto 3000 en lugar de 8080
- Ejercicio 3: Entra al contenedor y modifica el archivo
index.htmldesde dentro - Ejercicio 4: Lista todas las imágenes y elimina la versión
v1
- Ejercicio 5: Modifica el
docker-compose.ymlpara agregar variables de entorno - Ejercicio 6: Agrega un volumen para persistir logs
- Ejercicio 7: Cambia el límite de memoria a 256MB
- Ejercicio 8: Crea un segundo servicio en
docker-compose.yml
- Ejercicio 9: Crea un
docker-compose.ymlcon 3 servicios que se comuniquen - Ejercicio 10: Implementa health checks personalizados
- Ejercicio 11: Simula un despliegue blue-green
- Ejercicio 12: Investiga cómo convertir tu
docker-compose.ymla Task Definition de ECS
El puerto 8080 ya está en uso
# Opción 1: Usa otro puerto
docker run -d -p 3000:80 --name aws-skills-centers-web aws-skills-centers-demo:v1
# Opción 2: Encuentra qué está usando el puerto
lsof -i :8080 # Mac/Linux
netstat -ano | findstr :8080 # WindowsError: Conflicto de nombres
# Elimina el contenedor existente
docker rm -f aws-skills-centers-webError: Puerto en uso
# Cambia el puerto en docker-compose.yml
ports:
- "3000:80"Los cambios no se reflejan
# Fuerza la reconstrucción
docker-compose up -d --build --force-recreateVer qué contenedores están usando recursos
docker statsUna vez que domines este proyecto:
-
Amazon ECR (Elastic Container Registry)
- Almacena tus imágenes Docker en AWS
- Similar a Docker Hub, pero integrado con AWS
-
Amazon ECS (Elastic Container Service)
- Orquestador de AWS (como Docker Compose, pero en la nube)
- Task Definitions = docker-compose.yml
- Services = instancias corriendo
-
AWS Fargate
- ECS sin gestionar servidores
- Solo defines contenedores, AWS gestiona la infraestructura
-
Amazon EKS (Elastic Kubernetes Service)
- Kubernetes en AWS (orquestador más avanzado)
-
CI/CD con Docker
- AWS CodePipeline + CodeBuild
- Automatiza build → push → deploy
¿Tienes ideas para mejorar este demo?
- Fork del repositorio
- Crea una rama (
git checkout -b feature/MejorFeature) - Commit tus cambios (
git commit -m 'Agregar MejorFeature') - Push a la rama (
git push origin feature/MejorFeature) - Abre un Pull Request
Este proyecto ha sido desarrollado con fines educativos para el programa AWS Skills Centers.
© 2025 Bootcamp Institute. Todos los derechos reservados.
Desarrollado con ❤️ para empoderar la próxima generación de profesionales cloud.
¿Te gustó este demo? Lleva tu aprendizaje al siguiente nivel con clases gratuitas de AWS.
- ✅ Clases 100% gratuitas presenciales y virtuales
- ✅ Instructores certificados de AWS en vivo
- ✅ Exhibiciones interactivas (robótica, ML, IoT)
- ✅ Eventos de networking con empleadores
- ✅ Preparación para certificaciones AWS
- ✅ Abierto a todos - sin requisitos previos
- 🌎 Para LATAM: Formación en español con Bootcamp Institute
- 🇺🇸 Seattle, Washington
- 🇺🇸 Arlington, Virginia
- 🇿🇦 Ciudad del Cabo, Sudáfrica
- 🌎 Clases virtuales en español para toda LATAM con Bootcamp Institute
👉 https://aws.amazon.com/es/training/skills-centers/
"Los AWS Skills Centers son el lugar donde los curiosos con respecto a la nube pueden descubrir nuevas posibilidades profesionales."
¿Tienes preguntas o quieres profundizar más?
- 👨🏫 Instructor: Gabriel - AWS Hero
- 🎓 Bootcamp Institute: Formación en Cloud Computing para LATAM - bootcamp.institute
- 💬 Comunidad AWS Skills Centers: aws.amazon.com/es/training/skills-centers
- 🐛 Reporta issues: GitHub Issues
Parte 1 - Docker Básico:
- ✅ Qué es una imagen y un contenedor
- ✅ Cómo construir imágenes con Dockerfile
- ✅ Cómo ejecutar y gestionar contenedores individuales
- ✅ Comandos esenciales de Docker
- ✅ Las limitaciones de gestionar contenedores manualmente
Parte 2 - Orquestación:
- ✅ Qué es un orquestador y por qué lo necesitas
- ✅ Cómo Docker Compose simplifica la gestión de múltiples contenedores
- ✅ Configuración declarativa vs imperativa
- ✅ Conceptos que se traducen directamente a AWS ECS
- ✅ Fundamentos para trabajar con contenedores en producción
"El futuro pertenece a quienes creen en la belleza de sus sueños"
Cada contenedor que despliegas, cada servicio que orquestas, te acerca más a convertirte en un Cloud Professional. ¡Sigue adelante!
#AWSSkillsCenters #Docker #DockerCompose #CloudComputing #BootcampInstitute #ECS
