Seguridad/ServerStack Journal

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)

  1. Construimos la imagen Docker.
  2. Se escanea y se sube a ECR.
  3. El servidor descarga la imagen aprobada.
  4. 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:

  1. Trivy (durante build)
  2. Snyk (antes de push)
  3. 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

AspectoSin DockerCon Docker + ECR
Consistencia"Funciona en mi máquina" frecuenteGarantizada
Tiempo de deploy20-30 minutos2-3 minutos
RollbackManual (15-30 min)Automático (30 seg)
EscalamientoManual y propenso a erroresReplicar imagen (minutos)
SeguridadDepende de configuración manualEscaneo automático
AuditoríaInexistente o manualCompleta y automática
ActualizacionesRiesgo 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.

Contando…

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.

Escrito por

Equipo ServerStack Solutions

Fundador, ServerStack Solutions. Fundador de ServerStack Solutions. Diseño infraestructura y automatización para negocios que quieren dormir tranquilos. Escribo sobre CI/CD, DevOps y herramientas que hacen la diferencia.