Initial commit with translated description
This commit is contained in:
43
images.md
Normal file
43
images.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user