Sobes.tech
Junior

Cos'è un'immagine nel contesto della containerizzazione e quali livelli (strati) esistono in un'immagine?

sobes.tech AI

Risposta dell'AI

L’immagine (o image) nella containerizzazione è un pacchetto software eseguibile, immutabile, leggero e autonomo che include tutto il necessario per eseguire un’applicazione: codice, ambiente di esecuzione, strumenti di sistema, librerie e configurazioni. È essenzialmente uno "snapshot" del sistema di file e della configurazione da cui vengono creati i container.

I livelli (strati) dell’immagine sono sistemi di file separati e in sola lettura che compongono l’immagine. Ogni strato rappresenta un insieme di modifiche rispetto allo strato precedente. Sono impilati uno sopra l’altro, formando un sistema di file completo dell’immagine. Vantaggi degli strati:

  • Efficienza: Gli strati vengono memorizzati nella cache e riutilizzati tra le immagini, riducendo lo spazio su disco e accelerando la build.
  • Modularità: Le modifiche all’applicazione o al sistema operativo di base influenzano solo lo strato superiore, senza toccare quelli inferiori.
  • Condivisione: Diverse immagini possono condividere strati di base comuni, come lo strato del sistema operativo.

Struttura tipica degli strati:

  1. Strato di base: Spesso contiene un’immagine minima del sistema operativo (ad esempio, Alpine, Ubuntu Base).
  2. Strati di dipendenze: Aggiungono pacchetti come librerie, interpreti (ad esempio, Python, Node.js).
  3. Strato dell’applicazione: Aggiunge il codice dell’applicazione.
  4. Strato di configurazione/metadati: Descrive come deve essere avviata l’applicazione (ENTRYPOINT, CMD).

Ogni istruzione nel Dockerfile crea generalmente un nuovo strato dell’immagine. Ad esempio, il comando RUN esegue comandi e salva il risultato come un nuovo strato.

# Strato di base
FROM ubuntu:latest

# Strati di dipendenze
RUN apt-get update && apt-get install -y curl

# Strato dell’applicazione
COPY . /app
WORKDIR /app

# Strato di configurazione
CMD ["node", "app.js"]