Build multi-stage e immagini più piccole
Impari come i Dockerfile multi-stage consentano di distribuire immagini di produzione leggere separando gli strumenti di build dal runtime finale e riducendo drasticamente le dimensioni dell'immagine.
Build multi-stage e immagini più piccole è una lezione Docker & DevOps Fundamentals 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 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.
Perché le dimensioni dell'immagine sono importanti
Le immagini di grandi dimensioni sono lente da creare, inviare e scaricare e presentano una superficie di attacco maggiore. Un buon obiettivo ingegneristico è distribuire la più piccola immagine che esegua comunque l'applicazione.
Il problema dell'eccesso di contenuti
La compilazione di un'applicazione richiede spesso compilatori, dipendenze di sviluppo e strumenti di build. Se questi elementi finiscono nell'immagine finale, ne aumentano notevolmente le dimensioni, anche se l'applicazione in esecuzione non ne ha bisogno.
Che cos'è una build multi-stage?
Una build multi-stage usa diverse istruzioni FROM in un unico Dockerfile. Le fasi iniziali compilano l'applicazione; la fase finale copia solo gli artefatti completati, lasciando indietro gli strumenti di build.
Assegnazione del nome a una fase
Assegni un nome a una fase con AS, in modo che le fasi successive possano farvi riferimento.
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ciCompilazione nella prima fase
La fase di build compila o raggruppa l'applicazione. In questa fase sono disponibili tutte le dipendenze di sviluppo e gli strumenti necessari.
COPY . .
RUN npm run buildUna fase finale essenziale
Avvii la fase finale da un'immagine di base minimale, quindi copi solo ciò che serve all'applicazione per funzionare usando COPY --from.
FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modulesDockerfile multi-stage completo
Combinando le fasi si ottiene un'immagine finale di piccole dimensioni, che contiene l'applicazione compilata ma nessuno degli strumenti usati per la build.
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
CMD ['node', 'dist/main.js']Scelta di un'immagine di base di piccole dimensioni
L'immagine di base è spesso il fattore più importante. Le varianti Slim e Alpine riducono notevolmente le dimensioni delle immagini:
node:20~ grandenode:20-slim~ molto più piccolanode:20-alpine~ la più piccola, con librerie minime
Solo dipendenze di produzione
Eviti le dipendenze di sviluppo nell'immagine di runtime. L'installazione con il flag di produzione esclude i pacchetti di test e di build.
RUN npm ci --omit=devUso di .dockerignore
Un file .dockerignore esclude i contenuti superflui dal contesto di build, velocizzando le build ed evitando la copia accidentale di segreti o cartelle molto grandi.
node_modules
.git
.env
Dockerfile
*.logMisurazione del risultato
Verifichi il risultato controllando le dimensioni delle immagini. Un'immagine multi-stage ben realizzata può essere molto più piccola di una semplice immagine a fase singola.
docker images myappVerifica rapida
Verifichi la sua conoscenza delle build multi-stage.
Riepilogo
Ha imparato a distribuire immagini Docker essenziali:
- Le build multi-stage usano più fasi
FROMin un unico Dockerfile - Compili in una fase iniziale, quindi usi
COPY --fromper copiare solo gli artefatti in una fase finale slim - Scelga immagini di base di piccole dimensioni (slim/Alpine) e installi solo le dipendenze di produzione
- Usi
.dockerignoreper ridurre il contesto di build
Le immagini più piccole vengono compilate più rapidamente, distribuite più velocemente e sono più sicure.
Impara Docker & DevOps Fundamentals 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
- 12
- Lezioni
- 48
Domande Frequenti
La lezione «Build multi-stage e immagini più piccole» è gratuita?
Sì — il testo completo di «Build multi-stage e immagini più piccole» è 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 e immagini più piccole»?
Impari come i Dockerfile multi-stage consentano di distribuire immagini di produzione leggere separando gli strumenti di build dal runtime finale e riducendo drasticamente le dimensioni dell'immagine. 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 4 di 4.
Quanto tempo richiede la lezione «Build multi-stage e immagini più piccole»?
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
- Comprendere i Dockerfile
- Creazione di immagini Docker personalizzate
- Livelli e ottimizzazione delle immagini
- Build multi-stage e immagini più piccole