Docker + ECR: Contenedores seguros y consistentes en Ubuntu
Resumen simple de cómo Docker y Amazon ECR evitan el “en mi máquina funciona” y mantienen despliegues seguros y repetibles.
Docker empaqueta tu aplicación con todo lo necesario para que funcione igual en desarrollo y producción. ECR guarda esas imágenes de forma privada y segura. Ubuntu LTS aporta estabilidad y actualizaciones continuas.
¿Qué resuelve Docker?
- Elimina el “en mi máquina funciona”.
- Evita diferencias de versiones y dependencias.
- Permite despliegues consistentes y repetibles.
¿Por qué Amazon ECR?
- Imágenes privadas y cifradas.
- Escaneo automático de vulnerabilidades.
- Control de accesos y auditoría.
¿Por qué Ubuntu LTS?
- Soporte largo y parches de seguridad constantes.
- Bajo consumo y buen rendimiento para contenedores.
- Estabilidad probada en producción.
Flujo simple (de código a producción)
- Construimos la imagen Docker.
- Se escanea y se sube a ECR.
- El servidor descarga la imagen aprobada.
- Se despliega la nueva version sin sorpresas.
En ServerStack Solutions
Configuramos el pipeline completo con Docker + ECR + Ubuntu LTS para asegurar despliegues seguros y consistentes.
Contáctanos si quieres evaluar tu infraestructura actual.
- Resultados del scan
Paso 5: Pull desde Servidor Ubuntu
El servidor de producción (AWS Lightsail con Ubuntu) descarga la imagen:
- Autenticación con credenciales de AWS
- Verificación de firma digital
- Descarga cifrada
Caché inteligente: Solo se descargan capas nuevas (ahorra ancho de banda).
Paso 6: Ejecución en Contenedor
Docker corre el contenedor en Ubuntu:
Proceso de despliegue:
- Estado anterior: Contenedor v1.2.2 corriendo
- Descarga imagen v1.2.3
- Inicia nuevo contenedor
- Verifica health check
- Si OK: detiene contenedor antiguo
- Si falla: rollback automático
Tiempo de deploy: 30-60 segundos
Downtime: 0 (blue-green deployment)
Beneficios Medibles para tu Negocio
1. Consistencia Garantizada
Antes de Docker:
- "Funciona en desarrollo, falla en producción" → 4-8 horas debuggeando
- Frecuencia: 1-2 veces al mes
Con Docker:
- Si funciona en staging, funciona en producción
- Frecuencia de este problema: Prácticamente cero
Ahorro: 6-12 horas/mes de debugging
2. Despliegues Más Rápidos
Despliegue manual:
- Conectar SSH
- Actualizar código
- Instalar dependencias (pueden tardar 10+ minutos)
- Compilar
- Reiniciar servicios
Total: 20-30 minutos
Con Docker:
- Descargar imagen (ya compilada)
- Iniciar contenedor
Total: 1-2 minutos
3. Rollback Instantáneo
Si algo sale mal en producción:
Sin Docker:
- Volver a versión anterior del código manualmente
- Reinstalar dependencias viejas
- Recompilar
- Esperar y rezar
Tiempo: 15-30 minutos
Con Docker:
- Un comando: docker run imagen:v1.2.2
- Vuelve a la versión anterior exacta
Tiempo: 30 segundos
4. Escalamiento Horizontal Trivial
Necesitas manejar más tráfico?
Sin Docker:
- Configurar nuevo servidor
- Instalar todo manualmente
- Esperar que quede igual al primero
Con Docker:
- docker run imagen:v1.2.3 en el nuevo servidor
- Listo
Tiempo: Minutos vs días
5. Ambientes Idénticos
Desarrollo, staging y producción corren la misma imagen.
Esto elimina:
- Bugs por diferencias de ambiente
- "Funciona en staging pero no en producción"
- Configuraciones manuales distintas
Seguridad Multicapa con Docker + ECR + Ubuntu
Capa 1: Imagen Base Verificada
Usamos imágenes oficiales de:
- node:20-alpine (Node.js oficial)
- ubuntu:24.04 (Ubuntu oficial)
- nginx:alpine (Nginx oficial)
Verificadas y actualizadas por sus mantenedores oficiales.
Capa 2: Escaneo de Vulnerabilidades
Cada imagen pasa por 3 escaneos:
- Trivy (durante build)
- Snyk (antes de push)
- ECR (al almacenar)
Si alguno detecta HIGH o CRITICAL, el deploy se bloquea.
Capa 3: Contenedor con Privilegios Mínimos
Los contenedores corren con:
- Usuario no-root (sin privilegios de administrador)
- Sistema de archivos de solo lectura (excepto /tmp)
- Capabilities del kernel limitadas
- Sin acceso a host network
Traducción: Incluso si alguien hackea el contenedor, no puede hacer mucho daño.
Capa 4: Actualizaciones Automáticas de Ubuntu
El host (Ubuntu Server) se actualiza automáticamente:
- Parches del kernel de Linux
- Actualizaciones de Docker Engine
- Fixes de seguridad del sistema
Sin intervención manual, cero downtime.
Capa 5: ECR con Cifrado
Las imágenes en ECR están:
- Cifradas en reposo (AES-256)
- Cifradas en tránsito (TLS 1.3)
- Accesibles solo con credenciales de AWS IAM
Comparación: Con y Sin Contenedores
| Aspecto | Sin Docker | Con Docker + ECR |
|---|---|---|
| Consistencia | "Funciona en mi máquina" frecuente | Garantizada |
| Tiempo de deploy | 20-30 minutos | 2-3 minutos |
| Rollback | Manual (15-30 min) | Automático (30 seg) |
| Escalamiento | Manual y propenso a errores | Replicar imagen (minutos) |
| Seguridad | Depende de configuración manual | Escaneo automático |
| Auditoría | Inexistente o manual | Completa y automática |
| Actualizaciones | Riesgo alto (puede romper) | Imagen probada en staging primero |
Casos Reales de Uso
Startup de E-learning
Problema: Desplegaban manualmente. Cada deploy tomaba 1+ hora y rompía algo.
Solución: Docker + ECR + pipelines automatizados
Resultados:
- Deploys de 1 hora → 3 minutos
- Cero errores por ambiente
- Desarrolladores pueden desplegar sin IT
E-commerce en Temporada Alta
Problema: Black Friday requería escalar para 10x tráfico.
Solución: Contenedores Docker escalables horizontalmente
Resultados:
- Escalaron de 1 a 5 instancias en 10 minutos
- Cero downtime durante el evento
- Costos controlados (apagaron instancias después)
Agencia con Múltiples Clientes
Problema: Cada cliente requería configuración manual diferente.
Solución: Imágenes Docker personalizadas por cliente
Resultados:
- Setup de nuevo cliente: 2 días → 2 horas
- Todos los clientes en misma infraestructura base
- Mantenimiento simplificado
¿Cuánto Cuesta Docker + ECR?
Docker: $0 (open source)
Amazon ECR:
- Almacenamiento: $0.10/GB/mes
- Transferencia de datos: $0.09/GB
Ejemplo real:
- 5 imágenes Docker (~2GB cada una)
- Storage: $1/mes
- Transfers: $2-3/mes
Total: ~$4 USD/mes
Comparado con:
- Tiempo ahorrado en debugging: $500-1,000/mes
- Deploys más rápidos: 15 horas/mes ahorradas
- Cero errores de producción por diferencias de ambiente
ROI: Obvio.
¿Cómo Empezar con Docker en Tu Proyecto?
En ServerStack Solutions, Docker viene configurado desde día 1:
- Dockerfile optimizado para tu stack
- Pipeline de CI/CD que builds y deploys automático
- ECR configurado con políticas de seguridad
- Servidor Ubuntu listo para correr contenedores
- Monitoreo de contenedores incluido
No necesitas saber cómo funciona Docker internamente. Nosotros lo configuramos y administramos.
Tú solo ves:
- Deploys más rápidos
- Cero problemas de "funciona en desarrollo pero no en producción"
- Rollbacks instantáneos si algo falla
Próximos Pasos
Si tu proceso actual de despliegue involucra:
- Copiar archivos manualmente por FTP/SSH
- Instalar dependencias a mano en el servidor
- Esperar 20+ minutos por deploy
- Diferencias entre ambientes que causan bugs
Es momento de migrar a contenedores.
Contáctanos para una evaluación de tu infraestructura actual. Te mostraremos:
- Cómo Docker simplificaría tus deploys
- Cuánto tiempo ahorrarías mensualmente
- Plan de migración sin downtime
Relacionado: Aprende sobre la arquitectura completa y cómo Nginx protege tus contenedores.
Preguntas frecuentes
¿Por qué usar ECR en vez de Docker Hub?
Docker Hub tiene límites de pulls en cuentas gratuitas y las imágenes son públicas por defecto. ECR es privado por defecto, se integra con IAM de AWS para permisos granulares, escanea vulnerabilidades automáticamente y cifra en reposo/tránsito. Si tu infra ya vive en AWS, ECR reduce latencia y costos de transferencia.
¿Qué diferencia hay entre una imagen y un contenedor?
Una imagen es la plantilla inmutable (código + dependencias + config). Un contenedor es una instancia corriendo de esa imagen. Misma imagen puede crear N contenedores idénticos. La imagen pesa unos MB-GB; el contenedor corriendo consume memoria y CPU.
¿Blue-green deployment funciona con Docker solo?
Sí, pero requiere orquestación. Lo típico: corres dos versiones del contenedor (v1 y v2) simultáneamente, el reverse proxy (Nginx) dirige tráfico a v2 gradualmente, y si falla health check, vuelve a v1 instantáneamente. Kubernetes lo hace nativo; con Docker + Nginx también, solo que configurado a mano.