Files
ivangdavila_docker/images.md

1.8 KiB

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