Build multi-stage per l’efficienza
Utilizzi build multi-stage per creare immagini di produzione più piccole e sicure, separando le dipendenze di build e runtime.
Build multi-stage per l’efficienza è una lezione Docker & DevOps Fundamentals gratuita su CoddyKit. Questa è la lezione 1 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 Docker & DevOps Fundamentals, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Docker & DevOps Fundamentals include 4 lezioni in totale.
Introduzione alle build multi-stage
Benvenuto all'ottimizzazione avanzata dei Dockerfile! Oggi esploreremo le multi-stage build, una tecnica potente per creare immagini Docker più piccole ed efficienti.
Le immagini più piccole consentono download più rapidi, maggiore sicurezza e un migliore utilizzo delle risorse.

Perché le immagini più piccole sono importanti
Quando si crea un'immagine Docker, spesso include strumenti e dipendenze necessari solo durante il processo di build, ma non durante l'esecuzione finale dell'applicazione.
- Pull più veloci: le immagini più piccole vengono scaricate più rapidamente.
- Minore spazio su disco: si riduce lo spazio di archiviazione necessario nei registry e sugli host.
- Superficie di attacco ridotta: un numero inferiore di componenti comporta meno potenziali vulnerabilità.
- Maggiore sicurezza: l'immagine di produzione contiene solo ciò che è essenziale.
Il problema delle build a singolo stage
Consideri un'applicazione compilata, ad esempio una scritta in Go. Un Dockerfile tradizionale a singolo stage includerebbe nell'immagine finale l'intero compilatore Go e tutte le dipendenze di sviluppo.
Questo rende l'immagine finale molto più grande del necessario, poiché il compilatore non serve per eseguire il binario compilato.
Esempio di build a singolo stage (Go)
Ecco una semplice applicazione Go e un Dockerfile che la crea in un singolo stage. Noti che l'ambiente di build è incluso nell'immagine finale.
main.go:
package main
import "fmt"
func main() {
fmt.Println("Hello from Single-Stage Docker!")
}Dockerfile a singolo stage
Questo Dockerfile utilizza `golang:1.21-alpine` come base. Dopo la creazione dell'applicazione, questa grande immagine di base, insieme a tutti gli strumenti di build, rimane nell'immagine finale.
FROM golang:1.21-alpine
WORKDIR /app
COPY main.go .
RUN go build -o myapp main.go
EXPOSE 8080
CMD ["./myapp"]Anatomia delle build multi-stage
Le build multi-stage risolvono questo problema consentendo di definire più istruzioni `FROM` in un singolo Dockerfile. Ogni `FROM` avvia un nuovo stage di build.
- Utilizzare la parola chiave
ASper assegnare un nome a uno stage, ad esempioFROM golang:1.21-alpine AS builder. - È quindi possibile copiare gli artifact da uno stage precedente utilizzando
COPY --from=<stage_name>.
Solo lo stage finale viene salvato come immagine.
Struttura multi-stage
Un Dockerfile multi-stage tipico comprende almeno due stage:
- Build Stage: contiene tutti gli strumenti e il codice sorgente necessari per compilare l'applicazione.
- Runtime Stage: un'immagine di base minimale che include solo l'applicazione compilata e le relative dipendenze di runtime.
L'immagine intermedia dello stage di build viene eliminata, lasciando un'immagine finale leggera.
Esempio di build multi-stage (Go)
Riscriviamo il Dockerfile della nostra applicazione Go utilizzando un approccio multi-stage. Creeremo l'applicazione nel primo stage e copieremo quindi solo il binario compilato in un'immagine di base `alpine` molto più piccola.
# Stage 1: Build the application
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY main.go .
RUN go build -o myapp main.go
# Stage 2: Create the final lightweight image
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
EXPOSE 8080
CMD ["./myapp"]Esecuzione di una build multi-stage
Quando si crea questo Dockerfile, Docker esegue ogni stage. Tuttavia, solo il contenuto dell'ultima istruzione `FROM`, insieme ai file copiati dagli stage precedenti, costituisce l'immagine finale.
Il risultato è un'immagine significativamente più piccola rispetto a una build a singolo stage, perché il compilatore Go e gli strumenti di build vengono esclusi.
Vantaggi delle build multi-stage
Le build multi-stage sono estremamente utili per:
- Linguaggi compilati: Go, Java, C++, Rust.
- Framework frontend: creare applicazioni React/Angular e distribuire asset statici con Nginx.
- Applicazioni Node.js: installare `node_modules` in uno stage di build, quindi copiare solo `package.json`, `package-lock.json` e l'applicazione creata in un'immagine di runtime minimale.
Verifica delle conoscenze
Quali dei seguenti sono i principali vantaggi dell'utilizzo delle build Docker multi-stage?
Riepilogo: efficienza multi-stage
Ha imparato a utilizzare le build Docker multi-stage.
- Prevedono più istruzioni
FROMin un singolo Dockerfile. - La parola chiave
ASassegna un nome agli stage eCOPY --from=trasferisce gli artifact. - Il vantaggio principale consiste in immagini finali molto più piccole, sicure ed efficienti.
Questa tecnica è fondamentale per ottimizzare le applicazioni containerizzate. Ora vedremo come sfruttare la cache delle build.
Domande Frequenti
La lezione «Build multi-stage per l’efficienza» è gratuita?
Sì — il testo completo di «Build multi-stage per l’efficienza» è 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 Docker & DevOps Fundamentals, passa a CoddyKit PRO. Il corso Docker & DevOps Fundamentals include 4 lezioni in totale.
Cosa imparerò in «Build multi-stage per l’efficienza»?
Utilizzi build multi-stage per creare immagini di produzione più piccole e sicure, separando le dipendenze di build e runtime. Eserciti Docker & DevOps Fundamentals 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 Docker & DevOps Fundamentals?
Non è richiesta alcuna esperienza precedente. Docker & DevOps Fundamentals su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Build multi-stage per l’efficienza»?
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 Docker & DevOps Fundamentals?
Sì. Ogni lezione Docker & DevOps Fundamentals 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
- Build multi-stage per l’efficienza
- Utilizzo della cache di build
- Best practice di sicurezza per i Dockerfile
- Riduzione delle immagini con basi Slim e Distroless