‫Tutto ok. I volumi sembrano piuttosto semplici, ma in realtà c'è molto da fare.
‫Il primo modo in cui puoi dire a un contenitore che deve preoccuparsi di un volume è in un Dockerfile.
‫Andiamo a controllare alcuni di quelli fuori.
‫Farò solo quello che faccio molto.
‫Sto andando a cercare MySQL.
‫Questo è il modo in cui ho imparato tanto sui Dockerfiles e su come usarli correttamente,
‫i repository ufficiali hanno impostazioni predefinite e procedure ottimali incorporate.
‫Quando vado qui su MySQL, farò semplicemente clic sull'ultimo Dockerfile qui. un comando di volume.
‫Scommetto perché è un database, probabilmente ha
‫Eccoci.
‫Questa è la posizione predefinita dei database MySQL. Questa immagine è programmata in modo da dire a
‫Docker che quando iniziamo un nuovo contenitore da esso, per creare effettivamente un nuovo percorso di
‫volume e assegnarlo a questa directory nel contenitore. Il che significa che tutti i file che inseriamo nel
‫contenitore, sopravviveranno al contenitore finché non elimineremo manualmente il volume.
‫E questo è qualcosa che dovremmo sottolineare qui è che i volumi hanno bisogno di eliminazione manuale.
‫Non puoi pulirli semplicemente rimuovendo un contenitore.
‫Sono un passo in più. Questo è solo per l'assicurazione, perché l'intero punto di
‫un comando del volume è dire che questi dati sono particolarmente importanti, almeno molto più importanti del contenitore stesso.
‫Se facciamo un docker su MySQL, e
‫poi faccio un controllo immagine docker su MySQL, non vediamo il Dockerfile perché il file Docker non
‫fa parte dei metadati dell'immagine, che noterete in questo area di configurazione, che ha specificato
‫quel volume lì.
‫Posso sempre dire che la configurazione, proveniente dal Dockerfile quando è stata creata, ha assegnato un volume
‫a quel percorso.
‫Facciamo un contenitore da esso.
‫Quindi contenitore docker esegue -d --name mysql.
‫Se ricordi di prima, quello di MySQL è poco speciale.
‫Ora richiede una variabile di
‫ambiente prima che funzioni.
‫È MYSQL_ALLOW_EMPTY_PASSWORD.
‫OK.
‫Quello che vedi è MySQL in esecuzione. nella configurazione che c'è un volume.
‫Se facciamo un container docker ispezionare mysql, dovremmo vedere la stessa cosa dove ci dice
‫Qui.
‫Possiamo anche vederlo qui sotto i monti. Questo è, è in realtà il contenitore in esecuzione che ottiene la
‫propria posizione univoca sull'host, per archiviare tali dati e quindi è in background, mappato o montato, in quella posizione nel contenitore, in modo che
‫la posizione nel contenitore in realtà pensa solo che stia scrivendo
‫in / var / lib / mysql.
‫In questo caso, possiamo vedere che i dati effettivamente vivono in quella posizione sull'host. ls e possiamo vedere che
‫abbiamo ora un volume.
‫Quindi eseguiamo un volume docker Ora notiamo che questo ha un ID univoco che non sapremo
‫mai a cosa diamine va,
‫giusto?
‫Quindi, facciamo un controllo su questo.
‫Non devi digitare tutto.
‫Puoi semplicemente digitare il primo paio di caratteri e premere Tab per completarlo. Riceverai informazioni simili
‫sul volume stesso.
‫una macchina Linux, puoi navigare in quella posizione sul tuo disco fisso e vedere i dati.
‫Se lo stai facendo su
‫Ci saranno in realtà alcuni database lì.
‫Se sei su un Mac o Windows, ricorda che Docker per Windows e Docker per Mac in
‫realtà stanno facendo un po 'sullo sfondo che è nascosto da noi dove sta effettivamente creando una VM Linux.
‫Quindi questi dati sono tecnicamente all'interno di quella VM Linux. Non sarai in grado di andare su quel percorso sul tuo
‫computer Windows o Mac e vedere i dati. In realtà è dentro quella VM.
‫Vedremo tra un po ', con i volumi montati, come possiamo aggirare anche questa limitazione.
‫molto user-friendly in termini di dirci cosa c'è dentro o a cosa è assegnato questo volume.
‫Guardando questo, si nota che non è
‫Possiamo vedere dalla prospettiva del contenitore quale volume sta usando, ma non possiamo vedere dalla prospettiva del volume
‫a che cosa è connesso.
‫Destra?
‫Se dovessi solo colpire la freccia su e, vediamo, creare un mysql2.
‫Ora viene creato un altro server MySQL in esecuzione in background.
‫Se eseguo un altro volume della finestra mobile ls, ne vedrai due.
‫Inizi a vedere il problema, giusto?
‫Non c'è un vero e proprio modo qui per distinguere l'uno dall'altro.
‫Se solo, per dimostrare un punto, un container mobile smette di mysql, e una finestra mobile un container
‫interrompe mysql2.
‫Facciamo una finestra mobile container ls, non vedremo alcun contenitore in esecuzione. Se facciamo un ls -a,
‫possiamo vederli tutti. E noti che sono fermati. E poi facciamo un volume docker ls, si
‫nota che abbiamo ancora i due volumi.
‫Se eseguo un contenitore docker rm mysql e quindi mysql2, poiché in effetti posso eseguire entrambe le operazioni
‫in un unico comando, rimuoverà entrambi i miei contenitori. volume docker ls, i miei volumi sono ancora lì.
‫Se ora eseguo un I miei dati sono ancora al sicuro.
‫Quindi, abbiamo risolto un problema.
‫I database sopravvivono all'eseguibile.
‫Come rendere questo un po 'più user friendly?
‫Ecco dove arrivano i volumi denominati e la possibilità per noi di specificare le cose sul comando di esecuzione
‫della finestra mobile.
‫Se colpisco la freccia verso l'alto un paio di volte fino a quando esco sul contenitore della finestra mobile, non importa quale
‫sarà la tua esecuzione di nuovo.
‫In questo caso, inseriremo effettivamente un comando -v. A -v ci consente di specificare un nuovo volume
‫che vogliamo creare per questo contenitore che sta per essere eseguito, o ci consente altre
‫due opzioni.
‫Uno di questi è quello di creare un volume con nome.
‫Se ho appena fatto -v, e poi var lib mysql, farei la stessa cosa è ciò che ha fatto
‫il nostro comando volume nel Dockerfile.
‫Non abbiamo davvero bisogno di farlo qui. Ma quello che possiamo fare è che posso mettere un nome
‫di fronte a due punti. Questo è noto come "volume chiamato". un nome descrittivo.
‫"Quando lo faccio, e poi faccio un volume di docker ls, vedrai che il mio nuovo contenitore sta usando un nuovo volume
‫e sta usando
‫Se eseguiamo un controllo del volume di docker su tale mysql, vedrai che questo è più facile da usare qui.
‫Se ho cancellato di nuovo il mio contenitore, e dobbiamo inserire un
‫-f perché è ancora in esecuzione, e poi ne eseguo un altro. E questa volta, gli
‫darò un nome diverso. E poi facciamo un altro volume di docker ls, vedrai
‫che sembra che non abbiamo creato un nuovo volume. Sta ancora usando lo stesso volume.
‫Facciamo ispezionare un container docker su mysql3. ciò che è stato configurato ma cosa stiamo correndo?
‫Quindi quello che vedremo qui è, sì, questo è
‫Questa è la nostra cavalcatura qui.
‫Vedremo qui che non solo il nome è più amichevole, ma in realtà ha cambiato la posizione della sorgente
‫per essere un po 'più amichevole.
‫è che quando sono in esecuzione per giorni o settimane alla volta, un particolare database, in un particolare contenitore che devo continuare a
‫utilizzare più e più volte e non voglio un server di database vuoto, I Finirò creando
‫i miei contenitori in questo modo e nominandoli per il progetto in modo che io sappia per cosa è destinato quel volume, e che
‫deve restare fermo.
‫Per me, un piccolo consiglio
‫Un'ultima cosa qui.
‫Perché dovresti creare un volume docker?
‫Se siamo in grado di crearli da un contenitore docker eseguire il comando in fase di runtime, e possiamo crearli specificandoli nel Dockerfile, ci sono solo
‫alcuni casi in cui vorresti crearlo prima del tempo. E in realtà puoi capirlo
‫abbastanza velocemente usando il comando help.
‫Perché qui è l'unico modo in cui possiamo effettivamente specificare un driver diverso.
‫Ricorda quella roba plug-in di cui parlerò in seguito?
‫Quindi tutte le opzioni del driver che vogliamo usare -o on.
‫Quindi se vogliamo inserire delle etichette, di cui parleremo più avanti nella sezione di produzione.
‫A volte, in casi particolari, è necessario creare il volume Docker in anticipo, ma in genere per
‫scopi di sviluppo locale, è sufficiente specificare solo un comando Dockerfile o Run.