44 lines
1.8 KiB
Markdown
44 lines
1.8 KiB
Markdown
# Image Building Traps
|
|
|
|
## Layer Cache
|
|
|
|
- `COPY . .` antes de `RUN npm install` = cache invalidado en cada cambio de código
|
|
- `apt-get update` y `apt-get install` en RUNs separados = packages stale semanas después
|
|
- `--no-cache` en build borra TODO el cache — no solo del paso actual
|
|
- Cache de un stage no se usa en otro stage — multi-stage rebuild from scratch
|
|
|
|
## Multi-Stage
|
|
|
|
- `--from=builder` con typo = copia de stage equivocado silenciosamente
|
|
- `COPY --from=0` es primer stage, no stage llamado "0"
|
|
- Stage sin nombre + reorden de stages = `--from=N` apunta a stage diferente
|
|
- Files copiados de stage anterior pierden permisos — copiar con `--chmod`
|
|
|
|
## Base Images
|
|
|
|
- `python:latest` hoy ≠ `python:latest` mañana — builds no reproducibles
|
|
- `alpine` sin glibc = muchos binarios no funcionan — errores crípticos
|
|
- `slim` images sin shell tools = debugging imposible
|
|
- Imagen "latest" puede ser major version diferente — breaking changes
|
|
|
|
## COPY vs ADD
|
|
|
|
- `ADD` con URL descarga pero no cachea — rebuild = re-download
|
|
- `ADD` con .tar.gz extrae automáticamente — sorpresa si no lo esperabas
|
|
- `COPY` no expande wildcards como shell — `COPY *.json ./` puede no hacer lo que esperas
|
|
- `.dockerignore` ignorado en builds remotos (docker build - < Dockerfile)
|
|
|
|
## ARG vs ENV
|
|
|
|
- `ARG` no disponible después de `FROM` — cada stage necesita re-declarar
|
|
- `ARG` con valor default + override vacío = usa el default, no vacío
|
|
- `ARG` visible en `docker history` — no para secrets
|
|
- `ENV` persiste en runtime — `ARG` solo en build
|
|
|
|
## Size Traps
|
|
|
|
- `rm -rf /var/lib/apt/lists` en RUN separado = espacio no recuperado (layers)
|
|
- `npm install --production` después de `npm install` = dev dependencies todavía en layer anterior
|
|
- `.git` copiado = megas extra si no hay .dockerignore
|
|
- Múltiples `RUN apt-get` = cada uno es layer con cache de apt
|