Skip to content

Dockerizacion Multi-stage

Construcción en múltiples etapas para contenedores Elixir de menos de 50MB en Cloud Run

Técnica estándar de la industria para desplegar aplicaciones Elixir en producción: Multi-stage Build.

Usando un Dockerfile tradicional de una sola etapa, el contenedor final mide entre 600MB y 1GB por arrastrar el compilador de Elixir, herramientas de C, Git y código fuente. Con multi-stage, el contenedor en Cloud Run pesa menos de 50MB.

  • Imagen pesada elixir:1.16-alpine
  • Herramientas: gcc, make, git (apk add build-base git)
  • Se descargan dependencias y se compila todo
  • mix release produce una carpeta compacta con binarios .beam más la BEAM VM minificada
  • Docker borra todo de la Etapa 1
  • Arranca desde alpine limpia (~5MB)
  • Instala solo openssl y ncurses (lo que Erlang necesita)
  • Copia exclusivamente el release compilado:
COPY --from=builder /app/_build/prod/rel/tlw ./

El código Elixir se compila a bytecode precalculado (no se interpreta como JS o Python). El release final lleva su propio motor BEAM incluido. bin/tlw start arranca la MV sin necesidad de Elixir ni Mix instalados.

  1. Cold Starts instantáneos en Cloud Run — 45MB se descargan en <1s vs 800MB que tardan 20-30s
  2. Seguridad — Sin código fuente, sin git/curl/mix para scripts maliciosos, corre como nobody
  3. Costo de almacenamiento — Imágenes pequeñas en Artifact Registry cuestan casi nada