I volumi Docker sono il modo preferito per gestire i dati persistenti creati e utilizzati dai contenitori Docker. Diamo un'occhiata a come funziona spiegando come creare volumi Docker su Windows. Imparerai anche a gestirli!
Questo post del blog contiene un video di accompagnamento creato dal collaboratore di TechSnips, Matt McElreath. Sentiti libero di avere un orologio o, se preferisci il testo, continua a leggere!
Memorizzazione di dati persistenti
Se desideri archiviare dati persistenti per i contenitori, sono disponibili un paio di opzioni. Per prima cosa, ti mostrerò come utilizzare un bind mount . Attualmente mi trovo in una cartella chiamata data sul mio C:\ . Se elenco il contenuto di questa cartella, puoi vedere che ho cinque file di testo.
Se voglio rendere questa cartella disponibile per un container, posso montarla all'avvio del container.
Andiamo avanti ed eseguiamo un container usando docker run
. Eseguirò questo contenitore in modalità interattiva, quindi specificherò -V
. Qui, inserirò il percorso della mia cartella dati, seguito da due punti, quindi specificherò il percorso all'interno del contenitore in cui vorrei che questa cartella fosse montata.
Per questo, specificherò il C:\shareddata cartella. Quindi specificherò l'immagine principale del server Windows e, infine, specificherò che voglio eseguire PowerShell una volta che sarò all'interno del contenitore.
docker run -it -v c:\Data:c:\shareddata microsoft/windowsservercore powershell
Ora che sono all'interno del nuovo contenitore, se elenco il contenuto di C:\ , puoi vedere che ho un shareddata cartella.
Andiamo in quella cartella ed elenchiamo il contenuto. Ecco i miei cinque file di prova che si trovano sul mio host contenitore.
Posso anche creare file in questa cartella, che saranno disponibili per altri contenitori o per il mio host contenitore. Andiamo avanti ed eseguiamo un nuovo elemento per creare un file chiamato containertest .
Possiamo vedere sopra che il nuovo file è stato creato dall'interno del contenitore. Ora uscirò da questo contenitore che lo spegnerà eseguendo exit
.
Se eseguo docker ps
, puoi vedere che al momento non ci sono container in esecuzione.
Enumerazione dei dati nei volumi Docker
Ora elenchiamo di nuovo il contenuto della cartella dati dal mio host contenitore.
Possiamo vedere il nuovo file che è stato creato dall'interno del contenitore chiamato containertest . I binding mount hanno alcune funzionalità limitate, tuttavia, quindi i volumi sono il modo migliore per realizzare ciò che stiamo cercando di fare. Per iniziare con i volumi, possiamo eseguire lo stesso comando per avviare un container, ma questa volta con un paio di piccole differenze. Laddove abbiamo specificato il volume, invece di utilizzare il percorso sul file system degli host del contenitore, userò la parola hostdata come nome di un volume che voglio creare e utilizzare.
Dall'interno del nuovo contenitore, se elenco il contenuto di C:\ , puoi vedere di nuovo che ho una cartella chiamata shareddata .
Se elenco il contenuto di quella cartella, è attualmente vuota perché abbiamo creato un volume vuoto. Ora eseguiamo Ctrl-P-Q che ci porterà fuori dal contenitore in esecuzione, ma lo manterrà in esecuzione in background.
Dall'host del contenitore, esegui docker volume ls
. Questo elencherà i volumi correnti su questo host contenitore. Ho un volume chiamato hostdata , che è stato creato quando l'ho specificato in docker run
comando.
Se eseguo docker ps
possiamo vedere il nostro container in esecuzione.
Arresta quel contenitore usando docker stop
. Ora non abbiamo container in esecuzione.
Rimuovere i contenitori interrotti eseguendo docker rm
. Se elenco di nuovo i volumi, puoi vedere che i hostdata il volume è ancora disponibile e può essere montato su nuovi contenitori.
Creazione di volumi Docker
Un altro modo per creare un volume consiste nell'usare docker volume create
comando. Se non specifichi un nome, Docker gli assegnerà un nome che è un lungo elenco di caratteri casuali. Altrimenti, puoi specificare un nome qui. Chiamerò questo volume logdata . Ora possiamo vedere che è nell'elenco quando elenchiamo di nuovo i volumi.
Ora lo monterai su un nuovo contenitore. Usa docker run
di nuovo e per il volume specificare il volume appena creato e montarlo su c:\logdata .
> docker run -it -v logdata:c:\logdata microsoft/windowsservercore powershell
Dall'interno del contenitore, accedi ai logdata cartella e creare un paio di file. Al momento, non ci sono file in questa directory, quindi vai avanti e creane alcuni.
PS> New-Item -Name Log1.txt -ItemType File
PS> New-Item -Name Log2.txt -ItemType File
Ora ho due file di registro in questa directory.
Esegui Ctrl-P-Q di nuovo per uscire da questo contenitore mentre è ancora in esecuzione. Mentre il container è in esecuzione, avvia un nuovo container con lo stesso volume montato.
> docker run -it -v logdata:c:\logdata microsoft/windowsservercore powershell
Se eseguiamo un elenco su logdata cartella nel nuovo contenitore possiamo vedere i due file di registro condivisi.
Ora esci da questo contenitore. Dovresti ancora avere un container in esecuzione e due container usciti.
Ora interrompi tutti i contenitori in esecuzione, quindi esegui docker rm
per rimuovere tutti i contenitori usciti.
Elenca di nuovo i volumi. I dati di registro il volume è ancora disponibile per essere montato su contenitori futuri.
Se esegui, esegui docker volume
, riceverai un aiuto per l'utilizzo del comando.
Ispezione dei volumi Docker
Abbiamo già esaminato create
, quindi passiamo a inspect
. Se eseguo docker volume inspect
contro i logdata volume, restituirà le proprietà per quel volume, incluso il punto di montaggio che è il percorso fisico del volume sull'host del contenitore.
Apriamo quella cartella usando Invoke-Item
e dai un'occhiata. Sotto i logdata cartella, c'è una cartella chiamata dati . Se lo apriamo, possiamo vedere i file che sono stati creati dal contenitore in precedenza.
Eliminazione dei volumi Docker
Per eliminare un volume, possiamo eseguire docker volume rm
, seguito dal nome del volume che desideri eliminare.
> docker volume rm logdata
Ora, se elenco i volumi, logdata non c'è più.
Infine, possiamo usare prune
per rimuovere tutti i volumi locali non utilizzati. Questo eliminerà tutti i volumi che non sono montati su un contenitore in esecuzione o arrestato.
Vuoi stare attento con questo comando, quindi c'è un avviso e un prompt per assicurarti di essere sicuro di volerlo fare. Se digito Y
e premi invio, mi mostrerà quali volumi sono stati eliminati.
E se elenco di nuovo i miei volumi puoi vedere che sono stati tutti cancellati.
Riepilogo
In questo post del blog, dovresti avere una buona panoramica della gestione dei volumi Docker in Windows. Docker è un'ottima piattaforma per container. Con il suo supporto per Windows e le tue nuove abilità nella gestione dei volumi Docker, sarai inarrestabile!