Kako deluje Docker shranjevanje: Prostornine proti vezanim nosilcem
Uvod
V tem vodiču se boste naučili, kako deluje Docker shranjevanje in kako ohraniti podatke z uporabo Docker Volumes in Bind Mounts. Prav tako boste razumeli ključne razlike med temi pristopi in kdaj uporabiti vsakega v produkciji. To vam pomaga preprečiti izgubo podatkov in oblikovati zanesljive sisteme v kontejnerjih.
Predpogoji
- Ciljna publika: Začetniki sistemski administratorji
- Ocenjeni čas: ~30 minut
- Operacijski sistem: Kateri koli OS s podporo za Docker, kot so Ubuntu 22.04+, Debian 12+, CentOS Stream ali macOS z Docker Desktop
- Programska oprema: Docker 24.0.0 ali novejši
- Dovoljenja: Uporabnik z dostopom do Dockerja ali sudo privilegiji
- Strojna oprema: Vsaj 2 GB RAM in 10 GB prostega prostora na disku
- Mreža: Dostop do interneta za prenos slik kontejnerjev
- Predznanje: Osnovna uporaba ukazne vrstice in razumevanje kontejnerjev
Korak 1: Razumevanje delovanja Docker shranjevanja
Docker kontejnerji uporabljajo slojni datotečni sistem. Vsak kontejner ima zapisljiv sloj na vrhu slojev slike, ki so samo za branje.
Kaj se zgodi, ko kontejner zapiše podatke
- Docker shranjuje sloje slike kot samo za branje
- Ko zaženete kontejner, Docker doda zapisljiv sloj
- Vse spremembe datotek se zgodijo samo v tem zapisljivem sloju
Rezultat
Ko izbrišete kontejner, so vsi podatki v zapisljivem sloju izgubljeni. To pomeni, da je shranjevanje kontejnerjev privzeto efemerno.
To vedenje je uporabno za aplikacije brez stanja, ne pa za baze podatkov ali trajne storitve.
Korak 2: Ustvarjanje in uporaba Docker Volumes
Docker Volumes so upravljane lokacije za shranjevanje, ki jih ustvari in vzdržuje Docker.
Ustvarite volumen
Zaženite naslednji ukaz:
docker volume create my_volume
Videti bi morali ime volumna, ki je vrnjeno.
Uporabite volumen v kontejnerju
Zaženite naslednji ukaz:
docker run -d -v my_volume:/app/data --name volume_test busybox
Docker namesti volumen znotraj kontejnerja na /app/data.
Rezultat
Podatki, zapisani na /app/data, ostanejo tudi, če je kontejner odstranjen.
Ključne značilnosti volumov
- Upravlja jih Docker
- Shranjeni v notranjih direktorijih Dockerja, kot je
/var/lib/docker/volumes/ - Enostavni za varnostno kopiranje in migracijo
- Izolirani od strukture datotečnega sistema gostitelja
Uporabite volumne za baze podatkov in produkcijske delovne obremenitve.
Korak 3: Ustvarjanje in uporaba Bind Mounts
Bind mounts povežejo določeno mapo na gostitelju z mapo znotraj kontejnerja.
Uporabite bind mount
Zaženite naslednji ukaz:
docker run -d -v /home/<YOUR_USERNAME>/data:/app/data --name bind_test busybox
Rezultat
Kontejner neposredno dostopa do mape gostitelja. Vse spremembe v mapi gostitelja so takoj vidne znotraj kontejnerja.
Ključne značilnosti bind mounts
- Odvisni od poti datotečnega sistema gostitelja
- Omogočajo neposredno urejanje datotek z gostitelja
- Brez izolacije, ki jo upravlja Docker
- Bolj prilagodljivi, vendar manj prenosljivi
Bind mounts takoj odražajo spremembe med gostiteljem in kontejnerjem.
Korak 4: Primerjava Volumes in Bind Mounts
Razumevanje razlik vam pomaga izbrati pravo možnost.
Docker Volumes
- Upravlja jih Docker
- Prenosljivi med okolji
- Varnejši za uporabo v produkciji
- Lažji za varnostno kopiranje
- Abstrahirani od datotečnega sistema gostitelja
Bind Mounts
- Upravlja jih gostitelj
- Povezani s specifičnimi potmi datotečnega sistema
- Uporabni za razvoj
- Omogočajo neposreden dostop do datotek
- Manj varni, če so napačno konfigurirani
Korak 5: Izbira med Volumes in Bind Mounts v produkciji
Uporabite naslednje smernice.
Kdaj uporabiti Docker Volumes
- Zaženete baze podatkov, kot sta MySQL ali PostgreSQL
- Shranjujete podatke aplikacij, ki morajo ostati
- Razporejate produkcijske storitve
- Potreba po prenosljivosti med strežniki
Kdaj uporabiti Bind Mounts
- Lokalna razvojna okolja
- Urejanje kode ali konfiguracijskih datotek neposredno
- Odpravljanje napak v vedenju kontejnerja
- Začasne ali testne nastavitve
Pomembno: Bind mounts lahko izpostavijo občutljive datoteke gostitelja kontejnerjem, če so napačno konfigurirani. Vedno preverite poti in dovoljenja.
Preverjanje in testiranje
Ustvarite testni kontejner z volumnom:
docker run -it -v my_volume:/data --name playground busybox
Znotraj kontejnerja ustvarite datoteko:
echo test > /data/file.txt
Izhod iz kontejnerja in ga odstranite:
docker rm -f playground
Zaženite nov kontejner z istim volumnom:
docker run -it -v my_volume:/data --name playground busybox
Preverite datoteko:
cat /data/file.txt
Pričakovani rezultat: Datoteka še vedno obstaja, kar potrjuje obstojnost podatkov.
Vračanje sprememb
Za čiščenje virov zaženite naslednje ukaze:
docker rm -f playground volume_test bind_test
docker volume rm my_volume
docker system prune -f
Pomembno: Odstranjevanje volumov trajno izbriše vse shranjene podatke.
Odpravljanje težav
- Težava: Podatki izginejo po ponovnem zagonu kontejnerja
Vzrok: Ni uporabljen volumen ali bind mount
Rešitev: Priključite trajno shranjevanje z uporabo volumov ali bind mounts - Težava: Napake pri zavrnitvi dovoljenja
Vzrok: Neskladje dovoljenj mape gostitelja
Rešitev: Prilagodite dovoljenja z uporabochmodalichown - Težava: Volumen se ne namesti pravilno
Vzrok: Napačna pot ali sintaksa
Rešitev: Preverite format montaže in poti
Zaključek in naslednji koraki
Naučili ste se, kako deluje Docker shranjevanje in kako ohraniti podatke z uporabo volumov in bind mounts. Prav tako razumete, kdaj uporabiti vsak pristop v produkciji. Naslednji korak je raziskovanje Docker Compose za upravljanje aplikacij z več kontejnerji in definiranje shranjevanja na bolj strukturiran način.