‫Questa sezione sarà piena di lezioni e compiti su dati persistenti.
‫In primo luogo, discuteremo i problemi dei dati persistenti e in che modo anche
‫questo è diventato un problema.
‫I concetti chiave che devi capire sono l'idea di un'infrastruttura immutabile.
‫E l'idea di contenitori è naturalmente effimera nel design.
‫Copriremo quelli nella prima lezione. Poi ci tufferemo nei volumi di dati e come quelli
‫che risolvono alcuni dei nostri problemi relativi ai dati persistenti. Quindi analizzeremo anche i bind mounts e come
‫risolviamo diversi problemi con i dati persistenti. preservare i dati del database, sostituendo i contenitori per i database.
‫Quindi finiremo questa sezione con un paio di compiti su come E poi anche attorno al montaggio effettivo del
‫codice in un contenitore dall'host mentre lo stai modificando, in modo che
‫tu possa eseguire quel codice all'interno del contenitore live. I requisiti per questa prima lezione sono solo capire come
‫eseguire i contenitori e i concetti di contenitore e immagine che abbiamo discusso finora.
‫Fino ad ora, ti sei preoccupato solo di ciò che è necessario per eseguire un contenitore, non dei dati univoci che potrebbero essere
‫creati dopo l'esecuzione di un contenitore.
‫I contenitori sono pensati per essere immutabili ed effimeri.
‫Quelle sono solo parole d'ordine di fantasia per immutabili e temporanee o usa e getta.
‫L'idea qui è che possiamo semplicemente buttare via un contenitore e crearne uno nuovo da
‫un'immagine, giusto?
‫Quindi non stiamo parlando di una reale limitazione dei contenitori, ma più di un obiettivo di progettazione o
‫di una buona pratica.
‫Questa è l'idea di un'infrastruttura immutabile in cui non cambiamo le cose una volta che sono in esecuzione.
‫Se è necessario che si verifichi una modifica della configurazione, o se è necessario che l'aggiornamento della versione del contenitore
‫avvenga, è necessario ridistribuire un nuovo contenitore.
‫Questo ci dà enormi benefici in termini di affidabilità e coerenza e rende le modifiche riproducibili.
‫Ma c'è un compromesso.
‫E i dati unici che la tua app produrrà? Quei database, o un archivio di valori chiave o qualsiasi altra cosa
‫che la tua app sputa in un file?
‫Idealmente, i contenitori non dovrebbero contenere i dati univoci mescolati con i binari dell'applicazione. Questo è noto come "separazione delle
‫preoccupazioni" e Docker ci offre in realtà un grande vantaggio qui.
‫Possiamo aggiornare la nostra applicazione ricreando un nuovo contenitore, con una versione aggiornata della nostra app, e idealmente, i nostri dati
‫unici sono ancora dove deve essere e sono stati conservati per noi mentre il nostro contenitore è stato riciclato.
‫Nel caso non l'avessi notato finora, i contenitori che stavamo usando, per impostazione predefinita, erano persistenti.
‫Eventuali modifiche in loro sono state effettivamente mantenute attraverso riavvii e riavvii finché non abbiamo rimosso il contenitore.
‫Solo perché abbiamo fermato il container o riavviato l'host, non
‫significa che le modifiche al file del contenitore andranno via.
‫È solo quando rimuoviamo il contenitore che il livello UFS scompare, ma vogliamo essere in grado
‫di farlo a volontà.
‫Questo problema di dati univoci è noto nel settore come "dati persistenti" e fino a quando i
‫container non hanno realmente un nome per questo. Perché, beh, la maggior parte delle cose che abbiamo costruito erano
‫persistenti, come sai quei vecchi server che eseguivano quella vecchia app per cinque o dieci anni o più.
‫Tutto era persistente per impostazione predefinita.
‫Ora nel nuovo mondo dei contenitori e del ridimensionamento automatico delle applicazioni, i dati persistenti creano
‫un problema unico.
‫Docker ha due soluzioni a questo problema, note
‫come "volumi di dati" e "bind mounts". "I volumi Docker sono un'opzione di configurazione per
‫un contenitore che crea una posizione speciale al di fuori del
‫file system union del contenitore per memorizzare dati univoci.
‫Questo lo mantiene attraverso le rimozioni dei container e ci consente di collegarlo a qualsiasi contenitore che vogliamo.
‫E il contenitore lo vede come un percorso di file locale.
‫Poi ci sono bind mounts, che semplicemente condividono o montano una directory host o un file in un contenitore.
‫Di nuovo, assomiglierà al contenitore di un percorso file locale o di una directory.
‫In realtà non saprà che proviene dall'host.