‫In regula. Volumele par destul de simple în față, dar de fapt există multe.
‫Primul mod în care puteți spune unui container care trebuie să-și facă griji pentru un volum este într-un fișier Docker.
‫Hai să verificăm câteva dintre ele.
‫Am de gând să fac ceea ce fac foarte mult.
‫Voi căuta MySQL.
‫Acesta este modul în care am învățat atât de mult despre Dockerfiles și cum să le folosesc în mod corect, că depozitele oficiale
‫sunt cu adevărat defecte implicite și cele mai bune practici integrate în ele.
‫Când mă duc aici la MySQL, o să dau click pe ultimul fișier Docker. Pariez că ești o bază
‫de date, probabil că ai o comandă de volum.
‫Vom merge acolo.
‫Aceasta este locația implicită a bazelor de date MySQL. Această imagine este programată astfel încât să spună
‫Docker că, atunci când începem un nou container din ea, să creăm de fapt o nouă locație
‫de volum și să o atribuim acestui director în container. Ceea ce înseamnă că toate fișierele pe care le punem acolo, în
‫container, vor depăși containerul până când vom șterge manual volumul.
‫Și ar trebui să subliniem aici că volumele necesită ștergerea manuală.
‫Nu puteți să le curățați doar prin eliminarea unui recipient.
‫Sunt un pas suplimentar. Asta e doar pentru asigurare, pentru că întregul punct al
‫unei comenzi de volum este de a spune că aceste date sunt deosebit de importante, cel puțin mult mai importante decât containerul însuși.
‫Dacă facem un draw de pe serverul MySQL și
‫apoi facem o inspectare a imaginilor de docker pe MySQL, nu putem vedea dosarul Docker, deoarece fișierul Docker nu este de
‫fapt o parte a metadatelor de imagine, lucru pe care îl vei observa în această config, că a
‫specificat volumul acolo.
‫Pot să spun întotdeauna că configul, care a venit de la Dockerfile când a fost construit, a atribuit un volum
‫acelei căi.
‫Să conducem un container de la el.
‫Deci, containerul de andocare rulează -d --name mysql.
‫Dacă vă amintiți mai devreme, MySQL este puțin special.
‫Acum este nevoie de o variabilă de
‫mediu înainte ca aceasta să funcționeze.
‫Este MYSQL_ALLOW_EMPTY_PASSWORD.
‫O.K.
‫Ceea ce vedeți este funcționarea MySQL. Dacă facem un container de docker inspecta
‫mysql, ar trebui să vedem același lucru în cazul în care ne spune în config că există un volum.
‫Aici.
‫Putem să vedem, de asemenea, aici, sub munte. Ce este acest lucru este faptul că acesta este, de fapt, containerul
‫care rulează, obținându-și propria locație unică pe gazdă, pentru a stoca acele date și apoi este în fundal, cartografiat sau montat, în acea locație din container,
‫astfel încât locația în container de fapt crede doar că scrie în
‫/ var / lib / mysql.
‫În acest caz, putem vedea că datele de fapt locuiesc în acea locație pe gazdă. Deci, hai să facem un volum de
‫docare și putem
‫vedea că acum avem un volum. Acum observăm că asta are ID-ul unic, că nu vom ști niciodată
‫ce naiba se întâmplă, nu-i
‫așa?
‫Deci, hai să facem o inspecție.
‫Nu trebuie să tastați întregul lucru.
‫Puteți să introduceți doar primele două caractere și să le apăsați pe Tab pentru a le completa. Veți obține acele informații
‫similare despre volumul în sine.
‫Dacă de fapt faceți acest lucru pe o mașină Linux, puteți naviga la acea locație pe hard
‫disk și a vedea datele.
‫De fapt, vor exista câteva baze de date acolo.
‫Dacă sunteți pe un Mac sau pe Windows, amintiți-vă că Docker pentru Windows și Docker for Mac
‫fac într-adevăr un pic în fundalul care este ascuns de noi unde se creează de fapt un Linux VM.
‫Deci, aceste date sunt din punct de vedere tehnic în interiorul Linux VM. Nu veți putea să mergeți la acea cale pe mașina dvs.
‫Windows sau Mac și să vedeți datele. Este de fapt în interiorul acelui VM.
‫Vom vedea într-un pic, cu volume voluminoase, cum putem obține în jurul valorii de această limitare, de asemenea.
‫Privind la acest lucru, observați că nu este foarte prietenos în ceea ce privește faptul că ne spuneți ce se află
‫în el sau la ce este alocat acest volum.
‫Putem vedea din perspectiva containerului volumul pe care îl folosește, dar nu putem vedea din perspectiva volumului
‫la ce este conectat.
‫Dreapta?
‫Dacă aș fi vrut doar să lovesc săgeata sus și, să vedem, să creez un mysql2.
‫Asta a creat un alt server MySQL care rulează în fundal.
‫Dacă fac un alt volum de docare, veți vedea două dintre ele.
‫Începeți să vedeți problema, nu?
‫Nu există nici o cale ușoară aici de a spune unul de celălalt.
‫Dacă tocmai, pentru a dovedi un punct, face un container docker stop mysql, și un docer un container
‫stop mysql2.
‫Facem un container pentru docuri, nu vom vedea niciun container care rulează. Dacă facem un ls-a, vom ajunge să
‫le vedem pe toate. Și observați că sunt opriți. Și apoi facem un volum de docare, observați
‫că avem încă cele două volume.
‫Dacă fac un container docker rm mysql și apoi mysql2, pentru că pot să le fac pe amândoi
‫într-o singură comandă, acesta va elimina ambele containere. Dacă acum fac un volum de docare, volumele mele
‫sunt încă acolo. Datele mele sunt încă în siguranță.
‫Deci, am rezolvat o problemă.
‫Bazele de date depășesc executabilul.
‫Cum facem acest lucru un pic mai ușor de utilizat?
‫Aici intră volumele numite și abilitatea de a specifica lucrurile pe comanda de derulare
‫a docker-ului.
‫Dacă l-am lovit pe săgeata de sus de câteva ori până ajung la containerul de docker alergat, nu contează cu adevărat pe care
‫o să mai alergi din nou.
‫În acest caz, vom arunca într-adevăr o comandă -v. A -v ne permite să specificăm fie un volum nou pe
‫care dorim să-l creăm pentru acest container pe care urmează să fie rulat, fie ne permite două alte
‫opțiuni.
‫Unul dintre ei este de a crea un volum numit.
‫Dacă tocmai am făcut -v, și apoi var lib mysql, care ar face același lucru este ceea ce a
‫comandat volumul nostru în Dockerfile.
‫Nu avem nevoie să facem asta aici. Dar putem face un nume în fața lui
‫cu un colon. Este cunoscut ca un volum numit. "Când fac
‫asta și apoi fac un volum de docare, vei vedea că noul meu container folosește un volum nou și folosește
‫un nume prietenos.
‫Dacă facem un volum de docere să inspectăm acel mysql, veți vedea că acest lucru este mai ușor de utilizat aici.
‫Dacă mi-am șters din nou containerul și trebuie să introducem un fișier pentru
‫că este încă în desfășurare și apoi am executat un altul. Și de data asta, îi voi
‫da un nume diferit. Și apoi vom face un alt volum de docare, veți vedea
‫că se pare că nu am creat un volum nou. Încă mai are același volum.
‫Să facem un container de docker inspectați pe mysql3. Apoi, ceea ce vedem aici este, da, asta
‫a fost configurat, dar ce facem?
‫Asta se întâmplă aici.
‫Vom vedea aici că nu numai numele este mai prietenos, dar, de fapt, a schimbat locația sursă pentru
‫a fi și mai prietenă.
‫Pentru mine, un mic sfat aici este ca atunci cand rulez zile sau saptamani intr-o anumita perioada, o anumita baza de date, intr-un anumit container
‫pe care trebuie sa-l folosesc mereu si peste si nu vreau un server de baze de
‫date goale, am "În sfârșit, voi crea containerele mele în acest fel și le voi numi pentru proiect, astfel încât să știu ce este volumul
‫pentru el și că
‫trebuie să rămână în jur.
‫Un ultim lucru aici.
‫De ce doriți să creați volumul docului?
‫Dacă le putem crea dintr-o comanda de rulare a containerelor docker la timpul de execuție și le putem crea, specificându-le în Dockerfile, există doar câteva
‫cazuri în care doriți să le creați înainte. Și puteți să vă gândiți la
‫asta destul de repede, utilizând comanda de ajutor.
‫Pentru că aici este singura modalitate prin care putem specifica un driver diferit.
‫Amintiți-vă de lucrurile despre plug-in despre care voi vorbi mai târziu?
‫Apoi, toate opțiunile driverului pe care vrem să le folosim.
‫Apoi, dacă vrem să introducem etichete, despre care vom vorbi mai târziu în secțiunea de producție.
‫Uneori, în cazuri speciale, trebuie să creați volumul Docker înainte, dar de obicei pentru scopurile dvs. de
‫dezvoltare locală, specificându-l într-un Dockerfile sau pe comanda de rulare este bine.