chore(docker): optimise image size #12

Closed
opened 2026-08-23 20:59:53 +02:00 by vmruiz · 1 comment
Owner

Problema

La imagen actual (Dockerfile en main) pesa más de lo necesario:

  • Base + ffmpeg por apt: python:3.12-slim + apt-get install ffmpeg arrastra decenas de paquetes (estimado ~150-250 MB extra instalados). Hay que medirlo, pero es casi seguro el mayor contribuidor.
  • Sin .dockerignore: COPY . /app manda al contexto y a la imagen .git, tests/, caches de worktree, etc. → capas más grandes y builds más lentos.
  • Una sola etapa: la imagen final contiene las herramientas de pip/setuptools y restos del proceso de instalación, no solo el runtime.

Afecta tanto a la imagen de prod como a las de preview dev (telegramarr:dev-<id>-<sha>, una pila por rama en el runner), donde el espacio se multiplica.

Propuesta

  1. Añadir .dockerignore (.git, tests/, __pycache__/, .venv/, docs, etc.).
  2. Build multi-stage: instalar deps en un stage builder y copiar solo el venv/site-packages al stage final.
  3. Evaluar alternativas a ffmpeg de apt: binario estático o copiar solo los binarios necesarios desde un stage dedicado. Si se queda apt, dejarlo documentado con su coste medido.
  4. Valorar uv sync --frozen --no-dev (el repo ya usa uv): instalación reproducible y más rápida que pip install ..
  5. Mantener compatibilidad: ffmpeg tiene que seguir operativo en el contenedor worker (descargas/media).

Criterios de aceptación

  • Tamaño antes/después medido con docker images y anotado en la PR
  • Reducción significativa (objetivo inicial >=30%, ajustable tras medir)
  • CI verde (salvo los 3 tests conocidos que requieren Redis)
  • Preview dev desplegado y funcional
  • El worker sigue pudiendo procesar media (ffmpeg operativo)
## Problema La imagen actual (`Dockerfile` en `main`) pesa más de lo necesario: - **Base + ffmpeg por apt**: `python:3.12-slim` + `apt-get install ffmpeg` arrastra decenas de paquetes (estimado ~150-250 MB extra instalados). Hay que medirlo, pero es casi seguro el mayor contribuidor. - **Sin `.dockerignore`**: `COPY . /app` manda al contexto y a la imagen `.git`, `tests/`, caches de worktree, etc. → capas más grandes y builds más lentos. - **Una sola etapa**: la imagen final contiene las herramientas de pip/setuptools y restos del proceso de instalación, no solo el runtime. Afecta tanto a la imagen de prod como a las de preview dev (`telegramarr:dev-<id>-<sha>`, una pila por rama en el runner), donde el espacio se multiplica. ## Propuesta 1. Añadir `.dockerignore` (`.git`, `tests/`, `__pycache__/`, `.venv/`, docs, etc.). 2. Build multi-stage: instalar deps en un stage *builder* y copiar solo el venv/site-packages al stage final. 3. Evaluar alternativas a ffmpeg de apt: binario estático o copiar solo los binarios necesarios desde un stage dedicado. Si se queda apt, dejarlo documentado con su coste medido. 4. Valorar `uv sync --frozen --no-dev` (el repo ya usa uv): instalación reproducible y más rápida que `pip install .`. 5. Mantener compatibilidad: ffmpeg tiene que seguir operativo en el contenedor *worker* (descargas/media). ## Criterios de aceptación - [ ] Tamaño antes/después medido con `docker images` y anotado en la PR - [ ] Reducción significativa (objetivo inicial >=30%, ajustable tras medir) - [ ] CI verde (salvo los 3 tests conocidos que requieren Redis) - [ ] Preview dev desplegado y funcional - [ ] El worker sigue pudiendo procesar media (ffmpeg operativo)

Branch preview deployed by CI.

Auto-generated by .forgejo/workflows/dev-deploy.yml.

Branch preview deployed by CI. - Branch: `chore/docker-image-size` - Commit: `6337924a340f4e99a7d100768675bab454ab4683` - Endpoint: https://telegramarr-e2bdf32c5.celor.es/ _Auto-generated by `.forgejo/workflows/dev-deploy.yml`._
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
vmruiz/telegramarr#12
No description provided.