‫In questa lezione, parleremo di montaggio vincolante e dati persistenti in quei montaggi. I requisiti sono davvero che tu sappia solo
‫sulla gestione dei container e su come eseguire i container.
‫Facciamo un salto. Parliamo di attacchi di collegamento. In realtà sono piuttosto fighi.
‫Quando ho saputo per la prima volta di loro, mi ha dato una specie di come avrei potuto usare Docker facilmente per lo
‫sviluppo locale.
‫In realtà, un mount bind è solo una mappatura dei file host o delle directory in un file contenitore
‫o directory. Puoi fare proprio questo.
‫È possibile specificare una directory o solo un singolo file. Sullo sfondo, in pratica
‫è solo che le due posizioni puntano alle stesse posizioni fisiche sul disco.
‫Ancora una volta, questo in realtà salta l'UFS come fanno gli altri volumi in modo che non cancellerà la
‫posizione del tuo host quando elimini il contenitore.
‫Se nel contenitore sono presenti file su cui si mappano i file host, i file host vincono. In realtà non elimina i file
‫nel contenitore che ha sovrascritto perché non sta realmente sovrascrivendo nulla
‫nel contenitore.
‫È proprio lì mentre esiste il bind mount.
‫Nel momento in cui non hai più bisogno del mount del bind e riesegui il container senza
‫di esso, vedresti effettivamente i dati sottostanti che erano lì prima. Poiché i montaggi di bind sono in genere
‫specifici dell'host, per funzionare devono essere necessari dati specifici sul disco rigido dell'host.
‫Non è possibile specificarli in un file Docker.
‫È necessario utilizzarli in fase di esecuzione quando si utilizza il comando Esegui contenitore finestra mobile. Puoi vedere il formato qui.
‫È davvero la -v che abbiamo usato prima, solo sul lato sinistro del colon,
‫in realtà stiamo inserendo un percorso completo piuttosto che solo un nome.
‫E il modo in cui il Docker può effettivamente dire la differenza tra il volume nominato, come
‫abbiamo fatto qualche tempo fa, e il bind mount, è che il bind mount inizia con una barra.
‫Su Windows, noterai che si tratta di due barre in avanti, quindi della lettera di unità e quindi del
‫tuo percorso.
‫Fintanto che hai i due punti sinistro e il lato destro, puoi davvero mappare tutto ciò che
‫vuoi dall'host nel contenitore e puoi anche specificare cose come sola lettura.
‫Il punto in cui questo ha davvero successo è con lo sviluppo e l'esecuzione di servizi all'interno del
‫tuo contenitore che accedono ai file che stai utilizzando sul tuo host o cambiano.
‫Facciamolo con Nginx.
‫Se vai alla radice del nostro repository per questo corso, e poi andiamo nella directory di esempio
‫2 Dockerfile. Ora eravamo qui prima.
‫Se ricordi, ci sono due file. Questo è per Nginx, giusto?
‫Se guardiamo il Dockerfile molto velocemente, è piuttosto semplice. Sta semplicemente specificando una directory di lavoro e quindi copiando
‫un file indice in quella directory.
‫Non ci sono volumi qui.
‫Un mount bind non richiede un volume per funzionare, anche se si potrebbe certamente essere lì.
‫L'host vince sempre, ricordi? Quindi, quando eseguiamo un container docker, facciamo
‫un -d ... chiamiamolo nginx.
‫Diamo la porta 8080 come prima.
‫Quindi questa volta gli daremo il volume. E devo dire che la mia attuale directory di lavoro verrà
‫effettivamente montata in quella directory di lavoro nel contenitore. Poiché il mio file di indice è qui
‫in questa cartella,
‫voglio che sia nel contenitore in modo da poterlo modificare qui, ed è visto dal vivo nel contenitore.
‫Quindi avrà un senso in un secondo.
‫Ecco un piccolo suggerimento veloce. Invece di dover capire tutto
‫il mio percorso e digitare tutto, puoi usare pwd qui in questo modo.
‫Che è una scorciatoia della shell che dice 'stampa la directory di lavoro e sostituisci questo comando con quel percorso.
‫'Quindi useremo la stessa directory di lavoro dal Dockerfile lì, e poi
‫specificheremo l'immagine Nginx.
‫Quello che farò, molto velocemente, è che in realtà aprirò un'altra finestra del terminale in modo da poter
‫fare due cose contemporaneamente.
‫Non hai davvero bisogno di farlo.
‫Fondamentalmente, stiamo solo per modificare il file sul nostro host, e poi sarò nel contenitore e vedremo cosa
‫sta succedendo.
‫Quindi, solo per assicurarci che
‫funzioni, andiamo su localhost.
‫OK, quindi questo non è il file HTML Nginx predefinito.
‫E abbiamo usato l'immagine normale di Nginx.
‫In realtà non abbiamo usato quello personalizzato da questa directory.
‫Abbiamo appena usato un'immagine stock. Per dimostrare questo punto, possiamo effettivamente fare lo
‫stesso, di nuovo il comando esatto ma estrarre -v e invece lo eseguirò sulla porta 8080. E chiamerò questo nginx2.
‫Se vado sul mio browser e vado su localhost 8080, questo è l'indice nginx predefinito. file html.
‫Questo è quello personalizzato che viviamo in questa directory.
‫Quindi, già possiamo vedere che lo ha mappato correttamente.
‫Se apro un'altra scheda qui e ottengo una riga di comando nel contenitore.
‫Quindi vai a quella directory.
‫Noterai che possiamo effettivamente vedere il Dockerfile perché mappiamo l'intera directory.
‫Se sopra a sinistra, se in realtà abbiamo creato un nuovo file e posso semplicemente usare quel comando touch di Linux qui per
‫creare un nuovo file. Quindi a destra ... oops ... continua a dimenticare che ... ls -al, e lo vedrai
‫nel tuo file.
‫Spero che tu capisca cosa sta succedendo qui, che entrambe queste posizioni sono la stessa posizione.
‫E se riecheggiassi qualcosa in quel file testme, e
‫poi ...
‫ecco qua.
‫Il nostro nginx è in grado di vedere le modifiche perché è solo un normale percorso di file
‫nel contenitore e quei file si trovano sull'host.
‫Se dovessi eliminarli nel contenitore, verrebbero eliminati sull'host perché è lo stesso
‫file.
‫Questo è quando di solito induco uno sviluppatore a pensare a tutti i loro ambienti
‫di sviluppo che hanno questa configurazione complicata. Forse stanno usando Vagrant, o qualche altro metodo
‫manuale per impostare il loro ambiente perfetto, e possono iniziare a vedere come questo potrebbe rendere tutto molto più semplice.
‫Poiché non ho dovuto eseguire alcuna complicata configurazione sul mio Mac, ho appena eseguito un contenitore.
‫Ho usato il comando -v con il mount, e ora il mio codice, sul mio host, può essere modificato sul mio host.
‫E davvero non ho mai bisogno di entrare nel guscio del contenitore.
‫Di solito, puoi semplicemente eseguire il contenitore e guardare i suoi registri per vedere se ci sono errori durante
‫la codifica.
‫Naturalmente, questo è un semplice esempio con Nginx. Più avanti, in realtà avremo esempi
‫specifici di diversi ambienti di sviluppo per sviluppo locale e container.