DevOps Bootcamp · Lezione

Riduzione delle immagini con basi Slim e Distroless

Riduca le immagini finali scegliendo immagini di base minimali, rimuovendo gli strumenti di build e usando basi distroless o scratch per pull più rapidi e una superficie d'attacco ridotta.

Lezione 4 di 413 passaggi

Riduzione delle immagini con basi Slim e Distroless è una lezione DevOps Bootcamp gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento DevOps Bootcamp, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso DevOps Bootcamp include 4 lezioni in totale.

Perché le dimensioni dell'immagine sono importanti

Le immagini più piccole vengono scaricate più velocemente, si avviano più rapidamente, costano meno da archiviare ed espongono meno pacchetti agli attaccanti. Ottimizzare le dimensioni offre vantaggi sia in termini di prestazioni sia di sicurezza.

Scegliere una base leggera

Le immagini predefinite sono comode, ma pesanti. Sostituire node:20 (circa 1 GB) con node:20-slim o node:20-alpine può ridurre immediatamente le dimensioni di centinaia di megabyte.

FROM node:20-slim

Compromessi di Alpine

Alpine è molto piccola, ma usa musl libc invece di glibc, causando talvolta problemi ai binari nativi. Eseguire test accurati; in alcuni casi -slim è l'opzione compatta più sicura.

FROM python:3.12-alpine

Combinare i layer RUN

Ogni RUN aggiunge un layer. Concatenare i comandi correlati ed eseguire la pulizia nello stesso layer; in caso contrario, i file eliminati continuerebbero a ingrossare il layer precedente.

RUN apt-get update \
 && apt-get install -y curl \
 && rm -rf /var/lib/apt/lists/*

Usare .dockerignore

Un file .dockerignore esclude dal contesto di build i file non necessari: node_modules, .git e i log. Un contesto più piccolo significa build più veloci e layer più piccoli.

# .dockerignore
.git
node_modules
*.log

Riepilogo delle build multi-stage

Eseguire la build in uno stage con tutti i compilatori, poi usare COPY --from per copiare solo l'artefatto in uno stage finale pulito. La toolchain non viene mai inclusa nell'immagine.

FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN go build -o app

FROM alpine:3.20
COPY --from=build /src/app /app

Alla scoperta di Distroless

Le immagini Distroless contengono solo l'applicazione e il relativo runtime: niente shell, niente gestore di pacchetti e nessun binario aggiuntivo. Sono compatte e difficili da sfruttare.

FROM gcr.io/distroless/static-debian12
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]

Niente shell, nessun problema

Distroless non include una shell, quindi i comandi RUN e docker exec sh non funzioneranno. Eseguire tutta la configurazione negli stage precedenti; usare il tag :debug quando è necessario esaminare il contenuto dell'immagine.

La base scratch

Per i binari completamente statici (Go, Rust), FROM scratch include solo l'eseguibile, spesso per una dimensione totale di pochi megabyte.

FROM scratch
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]

Misurare i risultati

Usare docker images per confrontare le dimensioni e docker history per vedere quali layer sono più grandi. Ottimizzare prima i layer più pesanti.

docker history myapp:latest

Bloccare le versioni, non usare latest

Bloccare un tag o un digest specifico rende le build riproducibili ed evita aumenti imprevisti delle dimensioni quando cambia un latest upstream.

FROM node:20.11.1-slim

Verifica rapida

Che cosa caratterizza un'immagine distroless?

Riepilogo

Ora è possibile ridurre drasticamente le dimensioni delle immagini:

  • Scegliere basi -slim, -alpine, distroless o scratch
  • Concatenare e pulire i layer RUN; usare .dockerignore
  • Le build multi-stage eliminano la toolchain
  • Misurare con docker history e bloccare le versioni

Immagini più piccole significano distribuzioni più veloci e sicure.

Gratis per iniziare

Impara DevOps Bootcamp con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
142
Lezioni
568

Domande Frequenti

La lezione «Riduzione delle immagini con basi Slim e Distroless» è gratuita?

Sì — il testo completo di «Riduzione delle immagini con basi Slim e Distroless» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso DevOps Bootcamp, passa a CoddyKit PRO. Il corso DevOps Bootcamp include 4 lezioni in totale.

Cosa imparerò in «Riduzione delle immagini con basi Slim e Distroless»?

Riduca le immagini finali scegliendo immagini di base minimali, rimuovendo gli strumenti di build e usando basi distroless o scratch per pull più rapidi e una superficie d'attacco ridotta. Eserciti DevOps Bootcamp con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare DevOps Bootcamp?

Non è richiesta alcuna esperienza precedente. DevOps Bootcamp su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Riduzione delle immagini con basi Slim e Distroless»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione DevOps Bootcamp?

Sì. Ogni lezione DevOps Bootcamp include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Build multi-stage per l’efficienza
  2. Utilizzo della cache di build
  3. Best practice di sicurezza per i Dockerfile
  4. Riduzione delle immagini con basi Slim e Distroless
← Torna a DevOps Bootcamp