Uvod
Docker je platforma za kontejnere koja predstavlja lagano, virtualizirano, prijenosno, softverski definirano standardizirano okruženje koje omogućuje softveru da se izvodi izolirano od drugog softvera koji se izvodi na fizičkom računalu domaćinu. Docker je ključna komponenta aspekta kontinuiranog razvoja i integracije (Continuous Development and Integration) u razvoju softvera. Pružanjem dosljednog okruženja za izvršavanje, Docker osigurava da se softver ponaša isto bez obzira na fizičko računalo domaćina na kojem je implementiran. Za temeljit pregled Docker ekosustava, pogledajte ovaj članak.
Iako su Docker kontejneri samostalni, ponekad moraju dijeliti pristup podacima ili trajno spremati podatke na disk nakon što se kontejner zaustavi. Podaci mogu biti u obliku baza podataka, log datoteka ili korisnički generiranih podataka. Takve podatke nemoguće je uključiti u konfiguracijsku datoteku Docker slike, ali moraju biti dostupni kako bi vaša aplikacija radila kako se očekuje. Dijeljenje i trajno spremanje podataka u Docker kontejnerima rješava se pomoću Docker Volumes. Docker Volumes se mogu kreirati tijekom kreiranja kontejnera ili kreirati kasnije i priložiti kontejnerima. U ovom vodiču raspravljat ćemo o četiri različita načina dijeljenja podataka između kontejnera.
Preduvjeti
- Postavite poslužitelj koji pokreće Ubuntu 20.04 i Kreirajte ne-root korisnika sa sudo privilegijama. Prijavite se s ne-root korisnikom kako biste nastavili sa sljedećim koracima.
- Instalirajte Docker - imamo vodič o tome Kako instalirati i upravljati Dockerom na Ubuntuu, trebate slijediti korake 1, 2, 3 i 4. Ovo bi trebalo raditi za bilo koju distribuciju Ubuntua.
Imajte na umu da će, iako radimo s Ubuntuom 20.04, upute i naredbe za Docker raditi na bilo kojem drugom operativnom sustavu s instaliranim Dockerom i sudo korisnikom dodanim u grupu docker, kao što je objašnjeno u gornjim preduvjetima.
Korak 1: Kreiranje neovisnih Docker volumena
Započet ćemo kreiranjem neovisnih volumena koji nisu povezani ni s jednim Docker kontejnerom. Kako bismo to postigli, imamo naredbu docker volume create koja je uvedena u verziji Docker 1.9. Unesite sljedeću naredbu za kreiranje volumena pod nazivom Step1DataVolume :
|
1 |
docker volume create --name Step1DataVolume |
Trebali biste vidjeti sljedeći izlaz koji označava da je kreiranje volumena bilo uspješno:
![]()
Sada kada imamo neovisni volumen, možemo kreirati novi kontejner iz službene Ubuntu slike kao primjer kako bismo ga iskoristili. Unesite sljedeću naredbu za kreiranje kontejnera i povezivanje volumena:
|
1 |
docker run -ti --rm -v Step1DataVolume:/Step1DataVolume ubuntu |
U ovoj naredbi, zastavica --rm će automatski izbrisati kontejner nakon izlaska. Zastavica -v koristi se za specificiranje i montiranje volumena. Zastavica -v prima naziv volumena, dvotočku i apsolutnu putanju unutar kontejnera gdje bi se volumen trebao pojaviti. Imajte na umu da kada se naredba pokrene, ako navedeni direktoriji u putanji ne postoje, oni će biti kreirani. Ako već postoje, montirani volumen će sakriti postojeći sadržaj. Za zastavicu -ti zastavicu, -t daje pristup terminalu, a -i omogućuje nam interakciju s kontejnerom putem terminala.
Dok ste unutar kontejnera, pokrenite sljedeću naredbu za pisanje nekih podataka u volumen:
|
1 |
echo "Step One Sample Text" > /Step1DataVolume/StepOne.txt |
Upišite exit i pritisnite enter za izlazak iz kontejnera. Kao što je objašnjeno, kontejner se automatski briše kada izađete, zahvaljujući zastavici --rm, međutim, volumen će i dalje biti dostupan.
Kako biste provjerili postoji li volumen i dalje, možete koristiti naredbu docker volume inspect:
|
1 |
docker volume inspect Step1DataVolume |
Trebali biste vidjeti sljedeći izlaz:

Zatim kreirajmo novi kontejner. Prvo, povežite volumen i provjerite možemo li pristupiti tekstu koji smo kreirali u prethodnom kontejneru. Unesite sljedeću naredbu za kreiranje i pokretanje kontejnera pomoću ubuntu slika:
|
1 |
docker run -ti --rm -v Step1DataVolume:/Step1DataVolume ubuntu |
Unutar spremnika pokrenite sljedeću naredbu kako biste provjerili postoji li StepOne.txt datoteka:
|
1 |
cat /Step1DataVolume/StepOne.txt |
Trebali biste vidjeti sličan izlaz:

Zatim upišite exit i pritisnite enter kako biste izašli iz spremnika. U ovom ste koraku naučili kako upravljati trajanjem podataka pomoću neovisnih Docker volumena i kako priključiti volumene na spremnike.
Korak 2: Stvaranje Docker volumena koji čuva podatke nakon brisanja spremnika
U ovom ćemo koraku upotrijebiti jednu naredbu za stvaranje volumena istovremeno sa stvaranjem spremnika. Zatim ćemo obrisati spremnik i priključiti volumen na novi spremnik. Naredba je slična onoj korištenoj u Koraku 1, međutim, dodajemo jednu zastavicu --name, kako bismo odredili naziv spremnika:
|
1 |
docker run -ti --name=Step2Container1 -v Step2DataVolume:/Step2DataVolume ubuntu |
Dok ste unutar spremnika, unesite sljedeću naredbu za pisanje podataka u volumen i provjerite jesu li podaci tamo:
|
1 2 3 |
echo "Step Two Sample Text" > /Step2DataVolume/StepTwo.txt cat /Step2DataVolume/StepTwo.txt |
Ispod je izlaz triju naredbi:

Zatim izađite iz spremnika. Kada ponovno pokrenete spremnik pomoću sljedeće naredbe, volumen će se automatski priključiti:
|
1 |
docker start -ai Step2Container1 |
Unutar spremnika provjerite je li volumen montiran provjerom postojanja StepTwo.txt datoteke pomoću naredbe:
|
1 |
cat /Step2DataVolume/StepTwo.txt |
Evo izlaza:

Sada možete izaći iz spremnika. Docker sprječava uklanjanje volumena na koji se referencira drugi spremnik. Možete pokušati ukloniti volumen pomoću naredbe:
|
1 |
docker volume rm Step2DataVolume |
U izlazu biste trebali vidjeti poruku o pogrešci:
![]()
Uklonimo spremnik pomoću ID-ja spremnika prikazanog u izlazu s naredbom docker rm:
|
1 |
docker rm e3932e65e484bbf4524ca8de1b1dd99c4e92c12f92a9d6b0567a643d0aa6bb2d |
Zamijenite istaknuti ID spremnika s ID-jem vašeg spremnika prikazanim u vašem terminalu. Naredba uklanja spremnik, ali ne uklanja volumen koji smo stvorili. Možete izlistati dostupne volumene pomoću naredbe docker volume ls kako biste provjerili:
|
1 |
docker volume ls |
Evo izlaza:

Za uklanjanje spremnika stvorenog u Koraku 2, unesite sljedeću naredbu:
|
1 |
docker volume rm Step2DataVolume |
U ovom ste koraku uspjeli stvoriti Docker volumen istovremeno sa stvaranjem spremnika. Pogledajmo kako možemo stvoriti volumen iz postojećeg direktorija s podacima.
Korak 3: Stvaranje Docker volumena iz postojećeg direktorija s podacima
Ako želite kopirati podatke u volumen, možete stvoriti volumen prilikom stvaranja spremnika i navesti put do direktorija koji sadrži podatke u osnovnoj slici. U naredbi ispod stvaramo spremnik i dodajemo volumen podataka na /var, što je direktorij koji sadrži podatke u osnovnoj slici:
|
1 |
docker run -ti --rm -v Step3DataVolume:/var ubuntu |
Kada se naredba pokrene, sadržaj iz direktorija /var osnovne slike bit će kopiran u volumen. Volumen se može priključiti na novi spremnik. Zatim izađite iz spremnika:

Unesite sljedeću naredbu za stvaranje spremnika, priključivanje volumena i izlistavanje sadržaja volumena pomoću naredbe ls:
|
1 |
docker run --rm -v Step3DataVolume:/Step3DataVolume ubuntu ls Step3DataVolume |
Trebali biste vidjeti sličan izlaz naredbe, što je kopija sadržaja direktorija /var iz osnovne slike koji je sada dostupan u Step3DataVolume:

Iako montiranje /var direktorija kao što smo to učinili u ovom primjeru može biti nepraktično, to nam pomaže razumjeti da možete montirati bilo koji direktorij stvoren u vašim prilagođenim slikama na Docker volumen kako biste podatke učinili dostupnima drugim spremnicima.
Korak 4: Dijeljenje podataka između više Docker spremnika
U većini slučajeva željet ćete da više spremnika pristupa podacima s jednog Docker volumena. U prethodnim primjerima priložili smo volumen samo jednom spremniku. Sada ćete naučiti kako priložiti volumen na više spremnika. Iako to možete lako postići, Docker ne upravlja zaključavanjem datoteka. Za više spremnika koji pišu na isti volumen, morate pojedinačno dizajnirati aplikacije koje se izvode u tim spremnicima kako bi upravljale pisanjem u zajedničke pohrane podataka kako biste izbjegli oštećenje podataka.
- Stvorite Step4Container1 i Step4DataVolume
Upotrijebite docker run naredbu s --name zastavicom za stvaranje imenovanog spremnika:
|
1 |
docker run -ti --name=Step4Container1 -v Step4DataVolume:/Step4DataVolume ubuntu |
Unutar spremnika pokrenite sljedeću naredbu za stvaranje tekstualne datoteke i dodavanje teksta:
|
1 |
echo "Step Four Sample Text" > /Step4DataVolume/StepFour.txt |
Nakon toga izađite iz spremnika i vratite se u okruženje računala domaćina. Sada želimo stvoriti još jedan spremnik i montirati volumene iz Step4Container1 na njega.
- Stvorite Step4Container2 i priložite volumene iz spremnika Step4Container1
Izvršite sljedeću naredbu za stvaranje Step4Container2 i montiranje volumena iz Step4Container1:
|
1 |
docker run -ti --name=Step4Container2 --volumes-from Step4Container1 ubuntu |
Unutar spremnika upotrijebite cat naredbu za provjeru postojanosti podataka:
|
1 |
cat /Step4DataVolume/StepFour.txt |
Trebali biste vidjeti sljedeći izlaz:

Možemo dodati još teksta u datoteku iz Step4Container2 unosom sljedeće naredbe:
|
1 |
echo "We are appending text while inside Step4Container2" >> /Step4DataVolume/StepFour.txt |
Nakon toga izađite iz spremnika i vratit ćemo se na Step4Container1 kako bismo provjerili jesu li podaci još uvijek prisutni.
- Provjerite promjene napravljene na Docker volumenu između različitih spremnika
Da biste vidjeli promjene, prvo ćete ponovno pokrenuti Step4Container1 pomoću naredbe:
|
1 |
docker start -ai Step4Container1 |
Provjerite promjene pomoću naredbe:
|
1 |
cat /Step4DataVolume/StepFour.txt |
Trebali biste vidjeti izlaz sličan snimci zaslona u nastavku:

Nakon što potvrdite da oba spremnika mogu čitati i pisati podatke na isti volumen, sada možete izaći iz spremnika. Kao što je spomenuto, Docker ne upravlja zaključavanjem datoteka, to je posao logike vaše aplikacije koja se izvodi unutar spremnika koja bi trebala upravljati pristupom za čitanje i pisanje zajedničkim pohranama podataka. Docker omogućuje montiranje volumena samo za čitanje kako bi se spriječilo slučajno oštećenje podataka od strane spremnika koji zahtijevaju samo pristup za čitanje dodavanjem :ro kao što je prikazano u sljedećem primjeru.
- Montiranje volumena na Docker spremnik samo za čitanje
Za ovaj primjer stvorit ćemo spremnik pod nazivom Step4Container3. U naredbi za stvaranje montiramo volumene iz Step4Container1 i dodajemo :ro kako bismo odredili da ovaj spremnik ima pristup samo za čitanje, ali ne može pisati na volumen. Izvršite sljedeću naredbu u svom terminalu:
|
1 |
docker run -ti --name=Step4Container3 --volumes-from Step4Container1:ro ubuntu |
Nakon što uđete u spremnik, možete pročitati tekstualnu datoteku u volumenu unosom sljedeće naredbe:
|
1 |
cat /Step4DataVolume/StepFour.txt |

Međutim, ako pokušate ukloniti datoteku pomoću naredbe:
|
1 |
rm /Step4DataVolume/StepFour.txt |
Dobit ćete poruku o pogrešci u svom terminalu poput:
![]()
Nakon što potvrdite dopuštenja za čitanje i pisanje, možete izaći iz spremnika. Ako želite očistiti spremnike i volumen stvorene u ovom vodiču, pokrenite sljedeće naredbe:
|
1 2 3 |
docker rm Step4Container1 Step4Container2 Step4Container3 docker volume rm Step4DataVolume |
U ovom ste koraku naučili kako dijeliti podatke između više spremnika pomoću Docker volumena, kao i montirati podatkovne volumene u spremnike samo za čitanje.
Zaključak
U ovom ste vodiču stvorili nekoliko Docker volumena i naučili kako dijeliti podatke između Docker spremnika. Dok smo se bavili dijeljenjem podataka između spremnika, napomenuli smo da pojedinačna logika aplikacije unutar spremnika mora upravljati zaključavanjem datoteka kako bi se spriječilo oštećenje podataka pri pisanju u dijeljene pohrane podataka, budući da Docker nema implementaciju za upravljanje zaključavanjem datoteka.
Za dodatne resurse o korištenju Dockera, možda biste trebali pogledati više vodiča na našem blogu:
- Kako dijeliti podatke između Docker spremnika i hosta
- Očistite Docker resurse – slike, spremnike i volumene
- Postavljanje Laravela, Nginxa i MySQL-a pomoću Docker Composea
- Instalacija i postavljanje Dockera na CentOS 7
Sretno računanje!
Komentari
Još nema komentara. Budite prvi.