U današnjem dijelu prijevoda serije materijala o Dockeru razgovarat ćemo o radu s podacima. Konkretno o Docker volumenima. U ovim materijalima stalno smo uspoređivali softverske mehanizme Dockera s različitim jestivim analogijama. Nećemo se udaljiti od ove tradicije ni ovdje. Podaci u Dockeru mogu biti začini. U svijetu postoji mnogo vrsta začina, a u Dockeru mnogo načina za rad s podacima.
→
→
→
→
→
→
Primijetite da je ovaj materijal pripremljen koristeći Docker engine verzije 18.09.1 i API verzije .
Podaci u Dockeru mogu se pohranjivati privremeno ili trajno. Počnimo s privremenim podacima.
Privremeno pohranjivanje podataka
U Docker kontejnerima rad s privremenim podacima može se organizirati na dva načina.
Zadano, datoteke koje kreira aplikacija koja radi unutar kontejnera pohranjuju se u sloju kontejnera koji podržava pisanje. Da bi ovaj mehanizam funkcionirao, ništa posebno nije potrebno postavljati. Dobiva se jeftino i efikasno. Aplikaciji je dovoljno samo pohraniti podatke i nastaviti s radom. Međutim, kada kontejner prestane postojati, nestaju i podaci pohranjeni na ovaj jednostavan način.
Za pohranu privremenih datoteka u Dockeru može se iskoristiti još jedno rješenje koje je prikladno kada je potrebna viša razina performansi u usporedbi s onom koja se može postići korištenjem standardnog mehanizma privremenog pohranjivanja podataka. Ako ne trebate da vaši podaci ostanu duže od postojanja kontejnera, možete povezati tmpfs s kontejnerom — privremeni skladišni prostor koji koristi RAM hosta. To će ubrzati izvođenje operacija pisanja i čitanja podataka.
Često se dogodi da je potrebno pohraniti podatke i nakon što kontejner prestane postojati. Za to će nam biti potrebni mehanizmi za trajnu pohranu podataka.
Trajno pohranjivanje podataka
Postoje dva načina za produženje životnog veka podataka izvan životnog veka kontejnera. Jedan od načina uključuje korišćenje bind mount tehnologije. Ovim pristupom, na kontejner se može mount-ovati, na primer, stvarna mapa. Podacima koji se nalaze u toj mapi mogu pristupiti i procesi izvan Dockera. Evo kako montiranje tmpfs i bind mount tehnologija.

Montiranje tmpfs i bind mount
Nedostaci korišćenja bind mount tehnologije su u tome što njenim korišćenjem otežava pravljenje rezervnih kopija podataka, migraciju podataka, i zajedničko korišćenje podataka među više kontejnera. Bolje je koristiti Docker volumene za trajno skladištenje podataka.
Docker volumeni
Volumen je datotečni sistem koji se nalazi na host mašini izvan kontejnera. Docker upravlja kreiranjem i upravljanjem volumenima. Evo glavnih osobina Docker volumena:
- Oni su sredstvo za trajno skladištenje informacija.
- Oni su samostalni i odvojeni od kontejnera.
- Različiti kontejneri mogu zajednički koristiti.
- Oni omogućavaju efikasno čitanje i pisanje podataka.
- Volumene je moguće smestiti na resurse udaljenog cloud provajdera.
- Mogu se šifrovati.
- Mogu dobiti imena.
- Kontejner može unapred napuniti volumen podacima.
- Prikladni su za testiranje.
Kao što vidite, Docker volumeni imaju izvanredne osobine. Hajde da pričamo o tome kako ih kreirati.
Kreiranje volumena
Volumene možete kreirati pomoću Docker alata ili putem API poziva.
Evo uputstva u Dockerfile-u koje omogućava kreiranje volumena prilikom pokretanja kontejnera.
VOLUME /my_volumeKada koristite ovakvu instrukciju u Docker-u, nakon kreiranja kontejnera, biće kreiran volumen koji sadrži podatke koji već postoje na datoj lokaciji. Obratite pažnju da vas kreiranje volumena pomoću Dockerfile-a ne oslobađa obaveze da navedete tačku montiranja volumena.
Volumene u Dockerfile-u možete kreirati i koristeći JSON format.
Pored toga, volumene možete kreirati putem komandne linije tokom rada kontejnera.
Rad sa volumenima iz komandne linije
▍Kreiranje volumena
Samostalan volumen možete kreirati sledećom komandom:
docker volume create --name my_volume▍Provjera informacija o volumenima
Da biste pregledali popis Docker volumena, upotrijebite sljedeću naredbu:
docker volume lsIstraživanje određenog volumena može se izvršiti na sljedeći način:
docker volume inspect my_volume▍Brisanje volumena
Volumen se može obrisati na sljedeći način:
docker volume rm my_volumeDa biste obrisali sve volumene koji se ne koriste od kontejnera, možete koristiti ovu naredbu:
docker volume prunePrije brisanja volumena, Docker će od vas zatražiti potvrdu za izvršenje ove operacije.
Ako je volumen povezan s bilo kojim kontejnerom, taj volumen se ne može obrisati dok se odgovarajući kontejner ne izbriše. Čak i ako je kontejner izbrisan, Docker to ne razumije uvijek. Ako se to dogodi, možete koristiti sljedeću naredbu:
docker system pruneOna je namijenjena za čišćenje resursa Dockera. Nakon izvršenja ove naredbe, trebali biste imati mogućnost brisanja volumena čiji je status prethodno bio pogrešno određen.
Flagevi —mount i —volume
Za rad s volumena često ćete morati koristiti flageve prilikom pozivanja naredbe. dockerNa primjer, da biste stvorili volumen tijekom kreiranja kontejnera, možete upotrijebiti ovu konstrukciju:
docker container run --mount source=my_volume, target=\/container\/path\/for\/volume my_image Davno, prije 2017. godine, bio je popularan flag --volume. Izvorno je ovaj flag (može se koristiti u skraćenom obliku, tada izgleda kao -v) korišten za samostalne kontejnere, dok je flag --mount bio u okruženju Docker Swarm. Međutim, počevši od Dockera 17.06, flag --mount može se koristiti u svim scenarijima.
Treba napomenuti da se korištenjem flageva --mount povećava količina dodatnih podataka koje je potrebno navesti u naredbi, no iz nekoliko razloga, bolje je koristiti taj flag umjesto --volume. Oznaka --mount -- to je jedini mehanizam koji omogućava rad s servisima ili navođenje parametara drajvera volumena. Osim toga, rad s ovim flagom je jednostavniji.
U postojećim primjerima naredbi usmjerenih na rad s podacima u Dockeru, možete pronaći mnogo primjera korištenja flageva -v. Pokušavajući prilagoditi te naredbe za sebe, imajte na umu da flagevi --mount i --volume koriste različite formate parametara. Dakle, ne možete jednostavno zamijeniti -v na --mount i dobiti radnu naredbu.
Glavna razlika između --mount i --volume je u tome što se pri korištenju flageva --volume svi parametri skupljaju zajedno, u jednom polju, dok se pri korištenju --mount parametri su odvojeni.
Pri radu s --mount parametri su prikazani kao parovi ključ-vrijednost, a to izgleda ovako key=value. Ovi parovi su odvojeni zarezima. Evo često korištenih parametara --mount:
type– vrsta montiranja. Vrijednost odgovarajućeg ključa može biti , ili . Ovdje govorimo o volumenima, što znači da nas zanima vrijednostvolume.source– izvor montiranja. Za imenovane volumene ovo je naziv volumena. Za neimenovane volumene ovaj ključ nije naveden. Može se skratiti nasrc.destination– putanju na koju se datoteka ili mapa montira unutar kontejnera. Ovaj ključ može se skratiti nadstilicilj.readonly– montira volumen koji je namijenjen . Korištenje ovog ključa nije obavezno, vrijednost mu nije dodijeljena.
Evo primjera upotrebe --mount s brojnim parametrima:
docker run --mount type=volume,source=volume_name,destination=\/path\/in\/container,readonly my_imageZaključci
Evo korisnih komandi koje možete koristiti pri radu s Docker volumenima:
docker volume createdocker volume lsdocker volume inspectdocker volume rmdocker volume prune
Evo popis često korištenih parametara za --mount, primjenjivih u naredbi oblika docker run --mount my_options my_image:
type=volumesource=volume_namedestination=\/path\/in\/containerreadonly
Sada, kada smo završili ovu seriju materijala o Dockeru, vrijeme je da kažemo nekoliko riječi o tome kamo se dalje mogu kretati oni koji uče Docker. veliki dobar članak o Dockeru. knjiga o Dockeru (prilikom kupnje ove knjige, pokušajte nabaviti najnovije izdanje). još jedna knjiga koja će odgovarati onima koji smatraju da je praksa najbolji način učenja tehnologija.
Dragi čitatelji! Koje biste materijale o Dockeru preporučili početnicima?
Izvor: habr.com
