1.8 KiB
1.8 KiB
Image Building Traps
Layer Cache
COPY . .antes deRUN npm install= cache invalidado en cada cambio de códigoapt-get updateyapt-get installen RUNs separados = packages stale semanas después--no-cacheen 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=buildercon typo = copia de stage equivocado silenciosamenteCOPY --from=0es primer stage, no stage llamado "0"- Stage sin nombre + reorden de stages =
--from=Napunta a stage diferente - Files copiados de stage anterior pierden permisos — copiar con
--chmod
Base Images
python:latesthoy ≠python:latestmañana — builds no reproduciblesalpinesin glibc = muchos binarios no funcionan — errores crípticosslimimages sin shell tools = debugging imposible- Imagen "latest" puede ser major version diferente — breaking changes
COPY vs ADD
ADDcon URL descarga pero no cachea — rebuild = re-downloadADDcon .tar.gz extrae automáticamente — sorpresa si no lo esperabasCOPYno expande wildcards como shell —COPY *.json ./puede no hacer lo que esperas.dockerignoreignorado en builds remotos (docker build - < Dockerfile)
ARG vs ENV
ARGno disponible después deFROM— cada stage necesita re-declararARGcon valor default + override vacío = usa el default, no vacíoARGvisible endocker history— no para secretsENVpersiste en runtime —ARGsolo en build
Size Traps
rm -rf /var/lib/apt/listsen RUN separado = espacio no recuperado (layers)npm install --productiondespués denpm install= dev dependencies todavía en layer anterior.gitcopiado = megas extra si no hay .dockerignore- Múltiples
RUN apt-get= cada uno es layer con cache de apt