V današnji del serije o Dockerju bomo govorili o delu s podatki. Zlasti o Docker volumnih. V teh materialih smo neprestano primerjali programske mehanizme Dockerja z različnimi užitnimi analogijami. Tudi tukaj ne bomo odstopili od te tradicije. Podatki v Dockerju naj bodo začimbe. Na svetu je veliko vrst začimb, prav tako pa tudi v Dockerju obstaja mnogo načinov ravnanja s podatki.
→
→
→
→
→
→
Upoštevajte, da je ta material pripravljen z uporabo Docker motorja različice 18.09.1 in API različice .
Podatki v Dockerju se lahko shranjujejo bodisi začasno bodisi trajno. Začnimo z začasnimi podatki.
Z začasnim shranjevanjem podatkov
V Docker kontejnerjih lahko organizirate delo z začasnimi podatki na dva načina.
Privzeto se datoteke, ki jih ustvari aplikacija, ki deluje v kontejnerju, shranijo v sloju kontejnerja, ki podpira pisanje. Da bi ta mehanizem deloval, ni treba ničesar posebej nastavljati. Enostavno je in ugodno. Aplikaciji je dovolj, da shranite podatke in nadaljuje z delom. Vendar pa, ko kontejner preneha obstajati, izginejo tudi podatki, shranjeni na ta enostaven način.
Za shranjevanje začasnih datotek v Dockerju lahko uporabite še eno rešitev, ki je primerna za tiste primere, ko je potreben višji nivo zmogljivosti v primerjavi s tem, kar je možno doseči z uporabo standardnega mehanizma začasnega shranjevanja podatkov. Če vam neobošljnete, da vaši podatki obstajajo dlje, kot obstaja kontejner, lahko priključite tmpfs - začasno skladišče podatkov, ki uporablja pomnilnik gostitelja. To omogoča pospešitev operacij branja in pisanja podatkov.
Pogosto se zgodi, da moramo podatke shraniti tudi potem, ko kontejner preneha obstajati. Za to nam bodo koristni mehanizmi trajnega shranjevanja podatkov.
Trajno shranjevanje podatkov
Obstajajo dva načina, kako podaljšati življenjsko dobo podatkov nad življenjsko dobo kontejnerja. Ena od metod je uporaba tehnologije bind mount. S tem pristopom lahko v kontejner priključite na primer dejansko obstoječo mapo. Z podatki, shranjenimi v tej mapi, lahko upravljajo tudi procesi zunaj Dockerja. Tako to montiranje tmpfs in tehnologija bind mount.

Montiranje tmpfs in bind mount
Slabosti uporabe tehnologije bind mount so v tem, da otežuje varnostno kopiranje podatkov, migracijo podatkov in skupno rabo podatkov med več kontejnerji. Za trajno shranjevanje podatkov je veliko bolje uporabiti Docker volumne.
Docker volumni
Volumen je datotečni sistem, ki se nahaja na gostiteljskem računalniku izven kontejnerjev. Ustvarjanje in upravljanje volumov poteka preko Dockra. Tukaj so glavne lastnosti Docker volumov:
- Predstavljajo sredstva za trajno shranjevanje informacij.
- So samostojni in ločeni od kontejnerjev.
- Lahko jih sočasno uporabljajo različni kontejnerji.
- Omogočajo učinkovito branje in pisanje podatkov.
- Volumne lahko shranjujete na virih oddanega oblaka.
- Lahko jih šifrirate.
- Lahko jim daste imena.
- Kontejner lahko pripravi volumen z napolnjenimi podatki vnaprej.
- So priročni za testiranje.
Kot vidite, imajo Docker volumni izjemne lastnosti. Pogovorimo se o tem, kako jih ustvariti.
Ustvarjanje volumov
Volumne lahko ustvarite z orodji Docker ali s pozivi API.
Tukaj je navodilo v Dockerfile, ki omogoča ustvarjanje volumna ob zagonu kontejnerja.
VOLUME /my_volumeZ uporabo takega ukaza Docker po ustvarjanju kontejnerja ustvari volumen, ki vsebuje podatke, ki že obstajajo na navedenem mestu. Upoštevajte, da ustvarjanje volumna z uporabo Dockerfile ne odveže od potrebe po določitvi točke priključitve volumna.
Volumne v Dockerfile lahko ustvarite tudi z uporabo JSON formata.
Poleg tega lahko volumne ustvarite z ukazno vrstico med delovanjem kontejnerja.
Delo z volumni iz ukazne vrstice
▍Ustvarjanje volumna
Samostojen volumen lahko ustvarite z naslednjim ukazom:
docker volume create --name my_volume▍Preverjanje informacij o volumnu
Da bi ste pregledali listu Docker volumena, koristite sledeću komandu:
docker volume lsIstraživanje konkretnog volumena može se izvršiti ovako:
docker volume inspect my_volume▍Brisanje volumena
Volumen se može obrisati ovako:
docker volume rm my_volumeDa biste obrisali sve volumene koji se ne koriste od strane kontejnera, možete koristiti sledeću komandu:
docker volume prunePre nego što obrišete volumene, Docker će vas zatražiti potvrdu za izvršenje ove operacije.
Ako je volumen povezan sa nekim kontejnerom, takav volumen se ne može obrisati sve dok odgovarajući kontejner nije obrisan. Čak i ako je kontejner obrisan, Docker to ne razume uvek. Ako se to desi — možete koristiti sledeću komandu:
docker system pruneOna je namenjena za čišćenje Docker resursa. Nakon izvršenja ove komande, trebalo bi da dobijete mogućnost da obrišete volumene čiji je status ranije bio pogrešno definisan.
Flags —mount i —volume
Za rad sa volumenima, prilikom pozivanja komande docker, često ćete morati koristiti flagove. Na primer, da biste kreirali volumen tokom kreiranja kontejnera, možete koristiti ovu konstrukciju:
docker container run --mount source=my_volume, target=/container/path/for/volume my_image U prošlosti (pre 2017. godine) popularan je bio flag --volume. Ovaj flag (može se koristiti i u skraćenom obliku, tada izgleda kao -v) se prvo koristio za samostalne kontejnere, dok je flag --mount bio namenjen za Docker Swarm okruženje. Međutim, počevši od Docker 17.06, flag --mount može se koristiti u svim scenarijima.
Treba napomenuti da prilikom korišćenja flaga --mount povećava se obim dodatnih podataka koje je potrebno navesti u komandi, ali iz više razloga, bolje je koristiti ovaj flag, umesto --volume. Zastavica --mount — to je jedini mehanizam koji omogućava rad sa servisima ili definisanje parametara drivera volumena. Pored toga, rad sa ovim flagom je jednostavniji.
U postojećim primerima komandi usmerenim na rad sa podacima u Dockeru, možete pronaći mnoštvo primera korišćenja flaga -v. Pokušavajući da prilagodite ove komande sebi, imajte na umu da flagovi --mount in --volume koriste različite formate parametara. To jest, ne možete jednostavno zameniti -v na --mount i dobiti radnu komandu.
Glavna razlika između --mount in --volume se sastoji u tome što prilikom korišćenja flaga --volume svi parametri se skupljaju zajedno, u jednom polju, dok se pri korišćenju --mount parametri se odvajaju.
Pri práci s --mount parametri su predstavljeni kao parovi ključ-vrednost, naime, izgleda kao key=value. Ovi parovi su odvojeni zarezima. Evo često korišćenih parametara --mount:
type— tip montiranja. Vrednost za odgovarajući ključ može biti , ili . Ovde govorimo o volumenu, tj. zanimaju nas vrednostivolume.source— izvor montiranja. Za imenovane volumene to je — ime volumena. Za neimenovane volumene ovaj ključ se ne navodi. Može biti skraćen nasrc.cilj— putanju na koju se fajl ili folder montira u kontejneru. Ovaj ključ može biti skraćen nadstilitarget.readonly— montira volumen koji je predviđen . Ovaj ključ nije obavezan, vrednost mu nije dodeljena.
Evo primera korišćenja --mount sa mnoštvom parametara:
docker run --mount type=volume,source=volume_name,destination=\/path\/in\/container,readonly my_imageZaključki
Evo korisnih komandi koje možete koristiti prilikom rada sa Docker volumenima:
docker volume createdocker volume lsdocker volume inspectdocker volume rmdocker volume prune
Evo liste često korišćenih parametara za --mount, koji se primenjuju u komandi poput docker run --mount my_options my_image:
type=volumesource=volume_namedestination=\/path\/in\/containerreadonly
Sada, kada smo završili ovu seriju materijala o Docker-u, vreme je da kažemo nekoliko reči o tome kuda se dalje mogu kretati oni koji uče Docker. dobar glavni članak o Docker-u. knjiga o Docker-u (prilikom kupovine ove knjige, pokušajte da dobijete najnovije izdanje). još jedna knjiga koja će odgovarati onima koji veruju da je praksa najbolji način učenja tehnologija.
Spoštovani bralci! Koje materijale o Docker-u biste preporučili novajlijama da prouče?
Izvor: habr.com
