Contenedores
Clase 16 de 75 • Curso de AWS Certified Solutions Architect Associate
Contenedores: Transformando el Desarrollo y Despliegue de Aplicaciones en AWS
En 2018, En Nexiabank con más de 300 desarrolladores enfrentaba un problema crítico: sus ciclos de despliegue tomaban semanas, las inconsistencias entre entornos causaban fallos impredecibles, y escalar su infraestructura para el Black Friday requería meses de planificación. Tras migrar su arquitectura monolítica a microservicios basados en contenedores orquestados con ECS, redujeron sus tiempos de despliegue de semanas a minutos, eliminaron los problemas de "funciona en mi máquina", y pudieron escalar automáticamente durante picos de tráfico sin intervención manual. Su transformación no solo mejoró la velocidad de desarrollo, sino que redujo sus costos de infraestructura en un 45%.
Contenedores vs. Máquinas Virtuales
Para entender el impacto de los contenedores, debemos compararlos con las máquinas virtuales tradicionales:
Máquinas Virtuales (VMs)
Las máquinas virtuales emulan un sistema completo:
- Incluyen su propio sistema operativo completo
- Requieren más recursos (CPU, memoria, almacenamiento)
- Mayor tiempo de inicio (minutos)
- Aislamiento fuerte a nivel de hardware virtualizado
- Mayor sobrecarga operativa
Contenedores
Los contenedores, por otro lado, comparten el kernel del sistema operativo host:
- Empaquetan solo la aplicación y sus dependencias
- Utilizan menos recursos (más ligeros)
- Tiempo de inicio muy rápido (segundos o milisegundos)
- Aislamiento a nivel de procesos
- Mayor densidad de aplicaciones por servidor
Docker como Runtime Estándar en AWS
Docker se ha convertido en el estándar de facto para la tecnología de contenedores:
Componentes clave de Docker
- Dockerfile: Archivo de texto que define cómo construir una imagen
- Imagen: Plantilla inmutable que contiene la aplicación y sus dependencias
- Contenedor: Instancia en ejecución de una imagen
- Registry: Repositorio para almacenar y distribuir imágenes
# Ejemplo de Dockerfile simple FROM node:14 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["node", "app.js"]
Integración de Docker en AWS
AWS ha adoptado Docker como su runtime de contenedores estándar:
- Todos los servicios de contenedores de AWS soportan imágenes Docker
- Las herramientas de AWS CLI y SDK permiten gestionar contenedores Docker
- AWS proporciona optimizaciones específicas para Docker en su infraestructura
Amazon Elastic Container Registry (ECR)
ECR es el servicio de AWS para almacenar, gestionar y desplegar imágenes de contenedores:
Características principales de ECR
- Totalmente integrado con IAM para control de acceso
- Compatibilidad con Docker CLI y otras herramientas estándar
- Escaneo de vulnerabilidades integrado
- Replicación entre regiones
- Ciclo de vida de imágenes para gestionar versiones antiguas
# Autenticación en ECR aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com # Etiquetar una imagen para ECR docker tag mi-aplicacion:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/mi-repositorio:latest # Subir imagen a ECR docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/mi-repositorio:latest
Repositorios privados vs. públicos
ECR ofrece dos tipos de repositorios:
- Repositorios privados: Accesibles solo dentro de tu cuenta de AWS o mediante permisos específicos
- ECR Public: Permite compartir imágenes públicamente, similar a Docker Hub
Patrones de Microservicios y Orquestadores de Contenedores
La arquitectura de microservicios divide las aplicaciones en servicios pequeños e independientes:
Beneficios de los microservicios
- Desarrollo independiente de componentes
- Escalado granular
- Aislamiento de fallos
- Flexibilidad tecnológica
- Despliegues más rápidos y seguros
Desafíos de los microservicios
- Mayor complejidad operativa
- Necesidad de orquestación
- Gestión de la comunicación entre servicios
- Monitoreo distribuido
Amazon Elastic Container Service (ECS)
ECS es el servicio de orquestación de contenedores nativo de AWS:
- Servicio totalmente gestionado
- Integración profunda con otros servicios de AWS
- Dos modos de ejecución:
- EC2: Contenedores ejecutados en instancias EC2 que tú gestionas
- Fargate: Modelo serverless donde AWS gestiona la infraestructura
Componentes clave de ECS:
- Cluster: Agrupación lógica de recursos
- Task Definition: Especificación de cómo ejecutar un contenedor
- Task: Instancia en ejecución de una Task Definition
- Service: Mantiene un número específico de tareas en ejecución
// Ejemplo simplificado de Task Definition { "family": "mi-aplicacion", "containerDefinitions": [ { "name": "web", "image": "123456789012.dkr.ecr.us-east-1.amazonaws.com/mi-repositorio:latest", "cpu": 256, "memory": 512, "portMappings": [ { "containerPort": 3000, "hostPort": 3000 } ] } ] }
Amazon Elastic Kubernetes Service (EKS)
EKS es el servicio gestionado de Kubernetes de AWS:
- Kubernetes es un orquestador de contenedores de código abierto
- Mayor portabilidad entre nubes y entornos on-premise
- Ecosistema más amplio de herramientas y extensiones
- Curva de aprendizaje más pronunciada que ECS
Componentes clave de EKS:
- Cluster: Conjunto de nodos que ejecutan aplicaciones contenerizadas
- Pod: Unidad más pequeña en Kubernetes, puede contener uno o más contenedores
- Deployment: Define el estado deseado para los Pods
- Service: Expone Pods como un servicio de red
# Ejemplo de Deployment en Kubernetes apiVersion: apps/v1 kind: Deployment metadata: name: mi-aplicacion spec: replicas: 3 selector: matchLabels: app: mi-aplicacion template: metadata: labels: app: mi-aplicacion spec: containers: - name: web image: 123456789012.dkr.ecr.us-east-1.amazonaws.com/mi-repositorio:latest ports: - containerPort: 3000
¿ECS o EKS?
La elección entre ECS y EKS depende de varios factores:
Resumen
Los contenedores han revolucionado la forma en que desarrollamos, desplegamos y escalamos aplicaciones en la nube. AWS ofrece un ecosistema completo para trabajar con contenedores, desde el almacenamiento de imágenes con ECR hasta la orquestación con ECS o EKS, y la automatización de despliegues con servicios de CI/CD.
La adopción de contenedores no solo mejora la eficiencia operativa y reduce costos, sino que también acelera el ciclo de desarrollo y mejora la calidad del software. Al entender los conceptos fundamentales, las diferencias entre orquestadores, y las mejores prácticas para integración continua, podemos aprovechar al máximo esta tecnología transformadora en nuestros proyectos en AWS.
La clave del éxito con contenedores está en adoptar no solo la tecnología, sino también las prácticas de DevOps que la acompañan, creando un ciclo virtuoso de desarrollo, pruebas, despliegue y monitoreo que permite a las organizaciones innovar más rápido y con mayor confianza.