În partea de astăzi a traducerii unei serii de materiale despre Docker, vom vorbi despre lucrul cu date. În special, despre volumele Docker. În aceste materiale, am comparat constant mecanismele de programare Docker cu diverse analogii comestibile. Nu ne vom abate de la această tradiție aici. Lasă datele din Docker să fie condimente. Există multe condimente în lume, iar Docker are multe moduri de a lucra cu date.
→
→
→
→
→
→
Vă rugăm să rețineți că acest material a fost pregătit folosind versiunea 18.09.1 a motorului Docker și versiunea API .
Datele din Docker pot fi stocate fie temporar, fie permanent. Să începem cu datele temporare.
Stocare temporară a datelor
Există două moduri de a gestiona datele temporare în containerele Docker.
În mod implicit, fișierele create de o aplicație care rulează într-un container sunt stocate într-un strat de container care poate fi scris. Pentru ca acest mecanism să funcționeze, nu trebuie configurat nimic special. Se dovedește ieftin și vesel. Aplicația trebuie pur și simplu să salveze datele și să continue să-și facă propriile lucruri. Totuși, după ce containerul încetează să mai existe, vor dispărea și datele salvate într-un mod atât de simplu.
Stocarea temporară a fișierelor în Docker este o altă soluție care este potrivită pentru cazurile în care aveți nevoie de un nivel de performanță mai ridicat decât ceea ce se poate realiza folosind mecanismul standard de stocare temporară a datelor. Dacă nu aveți nevoie ca datele dvs. să fie stocate mai mult decât există containerul, vă puteți conecta la container tmpfs - un depozit de informații temporar care utilizează memoria RAM a gazdei. Acest lucru va accelera execuția operațiunilor de scriere și citire a datelor.
Se întâmplă adesea ca datele să fie stocate chiar și după ce containerul încetează să mai existe. Pentru a face acest lucru, avem nevoie de mecanisme persistente de stocare a datelor.
Stocare persistentă a datelor
Există două moduri de a prelungi durata de viață a datelor decât durata de viață a containerului. O modalitate este de a folosi tehnologia de montare a legăturii. Cu această abordare, puteți monta, de exemplu, un folder real pe container. Procesele din afara Docker vor putea, de asemenea, să lucreze cu datele stocate într-un astfel de folder. Așa tehnologia de montare tmpfs și bind.

Montarea tmpfs și bind mount
Dezavantajele utilizării tehnologiei bind mount sunt că utilizarea acesteia complică backupul datelor, migrarea datelor, partajarea datelor între mai multe containere. Este mult mai bine să utilizați volume Docker pentru stocarea persistentă a datelor.
Volume Docker
Un volum este un sistem de fișiere care se află pe mașina gazdă în afara containerelor. Volumele sunt create și gestionate de Docker. Iată principalele proprietăți ale volumelor Docker:
- Sunt un mijloc de stocare permanentă a informațiilor.
- Sunt independente și separate de containere.
- Ele pot fi împărțite între diferite containere.
- Acestea vă permit să organizați citirea și scrierea eficientă a datelor.
- Volumele pot fi plasate pe resursele unui furnizor de cloud la distanță.
- Ele pot fi criptate.
- Li se pot da nume.
- Containerul poate aranja prepopularea volumului cu date.
- Sunt convenabile pentru testare.
După cum puteți vedea, volumele Docker au proprietăți uimitoare. Să vorbim despre cum să le creăm.
Crearea volumelor
Volumele pot fi create folosind solicitări Docker sau API.
Iată o instrucțiune în fișierul Docker care vă permite să creați un volum atunci când porniți un container.
VOLUME /my_volumeCând folosește o instrucțiune similară, Docker, după crearea containerului, va crea un volum care conține datele care există deja în locația specificată. Rețineți că, dacă creați un volum folosind un fișier Docker, acest lucru nu vă scutește de necesitatea de a specifica punctul de montare al volumului.
De asemenea, puteți crea volume într-un Dockerfile folosind formatul JSON.
În plus, volumele pot fi create folosind instrumente de linie de comandă în timp ce containerul rulează.
Lucrul cu volume din linia de comandă
▍Crearea volumului
Puteți crea un volum independent cu următoarea comandă:
docker volume create —-name my_volume▍Aflați informații despre volume
Pentru a vizualiza o listă de volume Docker, utilizați următoarea comandă:
docker volume lsPuteți explora un anumit volum ca acesta:
docker volume inspect my_volume▍Ștergerea unui volum
Puteți șterge un volum ca acesta:
docker volume rm my_volumePentru a elimina toate volumele care nu sunt folosite de containere, puteți apela la următoarea comandă:
docker volume pruneÎnainte de a șterge volume, Docker vă va cere să confirmați această operațiune.
Dacă un volum este asociat unui container, acel volum nu poate fi șters până când containerul corespunzător nu este șters. În același timp, chiar dacă containerul este scos, Docker nu înțelege întotdeauna acest lucru. Dacă se întâmplă acest lucru, puteți utiliza următoarea comandă:
docker system pruneEste conceput pentru a curăța resursele Docker. După executarea acestei comenzi, ar trebui să puteți șterge volumele a căror stare era anterior incorectă.
Indicatoarele --mount și --volume
Pentru a lucra cu volume, atunci când apelați comanda docker, deseori va trebui să utilizați steaguri. De exemplu, pentru a crea un volum în timpul creării containerului, puteți utiliza această construcție:
docker container run --mount source=my_volume, target=/container/path/for/volume my_image În antichitate (până în 2017), steagul era popular --volume. Inițial, acest steag (poate fi folosit și într-o formă prescurtată, apoi arată ca -v) a fost folosit pentru containere independente, iar steagul --mount - într-un mediu Docker Swarm. Cu toate acestea, începând cu Docker 17.06, steagul --mount poate fi folosit în orice scenariu.
Trebuie remarcat faptul că atunci când utilizați steagul --mount cantitatea de date suplimentare care trebuie specificate în comandă crește, dar, din mai multe motive, este mai bine să utilizați acest indicator special și nu --volume. Steag --mount este singurul mecanism care vă permite să lucrați cu servicii sau să specificați opțiunile driverului de volum. De asemenea, acest steag este mai ușor de lucrat.
În exemplele existente de comenzi de manipulare a datelor Docker, puteți vedea multe exemple de utilizare a steagului -v. Când încercați să adaptați aceste comenzi pentru dvs., rețineți că steaguri --mount и --volume utilizați diferite formate de parametri. Adică, nu poți pur și simplu înlocui -v pe --mount și obțineți o echipă de lucru.
Principala diferență între --mount и --volume este că atunci când folosești steagul --volume toți parametrii sunt colectați împreună într-un singur câmp și atunci când se utilizează --mount parametrii sunt separați.
Când lucrați cu --mount parametrii sunt reprezentați ca perechi cheie-valoare, și anume, arată ca key=value. Aceste perechi sunt separate prin virgule. Iată opțiunile utilizate în mod obișnuit --mount:
type- tipul monturii. Valoarea pentru cheia corespunzătoare poate fi , sau . Aici vorbim de volume, adică ne interesează valoareavolume.source- sursa de montare. Pentru volumele numite, acesta este numele volumului. Pentru volume fără nume, această cheie nu este specificată. Poate fi scurtat lasrc.destination- calea în care este montat fișierul sau folderul în container. Această cheie poate fi scurtată ladstsautarget.readonly- monteaza volumul care este destinat . Utilizarea acestei chei este opțională și nu i se atribuie nicio valoare.
Iată un exemplu de utilizare --mount cu multe optiuni:
docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_imageRezultatele
Iată câteva comenzi utile pe care le puteți utiliza atunci când lucrați cu volume Docker:
docker volume createdocker volume lsdocker volume inspectdocker volume rmdocker volume prune
Iată o listă de opțiuni frecvent utilizate pentru --mount, aplicabil într-o comandă a formei docker run --mount my_options my_image:
type=volumesource=volume_namedestination=/path/in/containerreadonly
Acum că am finalizat această serie Docker, este timpul să spunem câteva cuvinte despre unde pot merge mai departe cei care învață Docker. articol bun despre Docker. o carte despre Docker (când cumpărați această carte, încercați să obțineți cea mai recentă ediție a acesteia). o altă carte pentru cei care cred că practica este cea mai bună modalitate de a învăța tehnologia.
Dragi cititori! Ce materiale Docker le-ați recomanda pentru începători?
Sursa: www.habr.com
