Docker: multi-stage build per immagini leggere
Immagini piu piccole, deploy piu veloci
Un errore comune con Docker e produrre immagini enormi che includono compilatori, dipendenze di sviluppo e file inutili. I multi-stage build risolvono il problema separando la fase di build da quella di runtime.
Il principio
Si usano piu istruzioni FROM nello stesso Dockerfile. In uno stage si compila l'applicazione con tutti gli strumenti necessari; nello stage finale si copia solo l'artefatto prodotto, partendo da un'immagine base minimale.
# Stage 1: build
FROM node:20 AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Stage 2: runtime leggero
FROM node:20-slim
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
CMD ["node", "dist/server.js"]
I benefici
- Immagini molto piu piccole: niente toolchain di build nel runtime.
- Deploy piu rapidi: meno dati da trasferire.
- Superficie d'attacco ridotta: meno software, meno vulnerabilita.
Un consiglio in piu
Aggiungi un file .dockerignore per escludere node_modules, log e file temporanei dal contesto di build: velocizza ulteriormente la creazione dell'immagine.
In MUSTNODE adottiamo i multi-stage build per consegnare container leggeri, sicuri e veloci da distribuire.
Articoli correlati
Altri approfondimenti dalla categoria Cloud & DevOps.
On-premise vs Cloud Azure/AWS: criteri di scelta
Una guida pratica per scegliere tra deployment on-premise e cloud, valutando costi, sicurezza, latenza, compliance e scalabilita.
Kubernetes e orchestrazione dei container
Perche e quando adottare Kubernetes: concetti fondamentali, pod, deployment e servizi, con un occhio realistico ai costi di complessita.
Osservabilita: logging, metriche e tracing
I tre pilastri dell'osservabilita e come usarli per capire cosa succede davvero nei sistemi distribuiti in produzione.