Kako funkcionira Docker pohrana: Volumeni vs Povezani priključci
Uvod
U ovom vodiču naučit ćete kako funkcionira Docker pohrana i kako trajno pohraniti podatke koristeći Docker Volumes i Bind Mounts. Također ćete razumjeti ključne razlike između ovih pristupa i kada koristiti svaki od njih u produkciji. Ovo vam pomaže izbjeći gubitak podataka i dizajnirati pouzdane sustave u kontejnerima.
Preduvjeti
- Ciljana publika: Početnici sistem administratori
- Procijenjeno vrijeme: ~30 minuta
- Operativni sustav: Bilo koji OS s podrškom za Docker kao što su Ubuntu 22.04+, Debian 12+, CentOS Stream ili macOS s Docker Desktop
- Softver: Docker 24.0.0 ili noviji
- Dozvole: Korisnik s pristupom Dockeru ili sudo privilegijama
- Hardver: Najmanje 2 GB RAM-a i 10 GB slobodnog prostora na disku
- Mreža: Pristup internetu za preuzimanje slika kontejnera
- Pretpostavljeno znanje: Osnovno korištenje naredbenog retka i razumijevanje kontejnera
Korak 1: Razumijevanje kako funkcionira Docker pohrana
Docker kontejneri koriste slojeviti datotečni sustav. Svaki kontejner ima sloj za pisanje na vrhu slojeva slike koji su samo za čitanje.
Što se događa kada kontejner zapisuje podatke
- Docker pohranjuje slojeve slike kao samo za čitanje
- Kada pokrenete kontejner, Docker dodaje sloj za pisanje
- Sve promjene datoteka događaju se samo u ovom sloju za pisanje
Rezultat
Kada izbrišete kontejner, svi podaci u sloju za pisanje se gube. To znači da je pohrana kontejnera po defaultu prolazna.
Ovo ponašanje je korisno za aplikacije bez stanja, ali ne i za baze podataka ili trajne usluge.
Korak 2: Kreiranje i korištenje Docker Volumes
Docker Volumes su upravljane lokacije za pohranu koje kreira i održava Docker.
Kreirajte volumen
Pokrenite sljedeću naredbu:
docker volume create my_volume
Trebali biste vidjeti vraćeno ime volumena.
Koristite volumen u kontejneru
Pokrenite sljedeću naredbu:
docker run -d -v my_volume:/app/data --name volume_test busybox
Docker montira volumen unutar kontejnera na /app/data.
Rezultat
Podaci zapisani u /app/data ostaju čak i ako se kontejner ukloni.
Ključne karakteristike volumena
- Upravlja ih Docker
- Pohranjeni u Docker internim direktorijima kao što je
/var/lib/docker/volumes/ - Lako ih je sigurnosno kopirati i migrirati
- Izolirani od strukture datotečnog sustava domaćina
Koristite volumene za baze podataka i produkcijska opterećenja.
Korak 3: Kreiranje i korištenje Bind Mounts
Bind mounts povezuju određeni direktorij na domaćinu s direktorijem unutar kontejnera.
Koristite bind mount
Pokrenite sljedeću naredbu:
docker run -d -v /home/<YOUR_USERNAME>/data:/app/data --name bind_test busybox
Rezultat
Kontejner izravno pristupa direktoriju domaćina. Sve promjene u direktoriju domaćina odmah su vidljive unutar kontejnera.
Ključne karakteristike bind mounts
- Ovise o putanjama datotečnog sustava domaćina
- Omogućuju izravno uređivanje datoteka s domaćina
- Nema Docker-om upravljane izolacije
- Fleksibilniji, ali manje prenosivi
Bind mounts odmah odražavaju promjene između domaćina i kontejnera.
Korak 4: Usporedba Volumes i Bind Mounts
Razumijevanje razlika pomaže vam odabrati pravu opciju.
Docker Volumes
- Upravlja ih Docker
- Prenosivi između okruženja
- Sigurniji za produkcijsku upotrebu
- Lakši za sigurnosno kopiranje
- Apstrahirani od datotečnog sustava domaćina
Bind Mounts
- Upravlja ih domaćin
- Vezani za specifične putanje datotečnog sustava
- Korisni za razvoj
- Omogućuju izravan pristup datotekama
- Manje sigurni ako su pogrešno konfigurirani
Korak 5: Odabir između Volumes i Bind Mounts u produkciji
Koristite sljedeće smjernice.
Kada koristiti Docker Volumes
- Pokretanje baza podataka kao što su MySQL ili PostgreSQL
- Pohrana podataka aplikacije koji moraju ostati
- Implementacija produkcijskih usluga
- Potreba za prenosivošću između servera
Kada koristiti Bind Mounts
- Lokalna razvojna okruženja
- Izravno uređivanje koda ili konfiguracijskih datoteka
- Otklanjanje pogrešaka u ponašanju kontejnera
- Privremene ili testne postavke
Važno: Bind mounts mogu izložiti osjetljive datoteke domaćina kontejnerima ako su pogrešno konfigurirani. Uvijek provjerite putanje i dozvole.
Provjera i testiranje
Kreirajte testni kontejner s volumenom:
docker run -it -v my_volume:/data --name playground busybox
Unutar kontejnera, kreirajte datoteku:
echo test > /data/file.txt
Izađite iz kontejnera i uklonite ga:
docker rm -f playground
Pokrenite novi kontejner s istim volumenom:
docker run -it -v my_volume:/data --name playground busybox
Provjerite datoteku:
cat /data/file.txt
Očekivani rezultat: Datoteka još uvijek postoji, što potvrđuje trajnost podataka.
Vraćanje promjena
Za čišćenje resursa, pokrenite sljedeće naredbe:
docker rm -f playground volume_test bind_test
docker volume rm my_volume
docker system prune -f
Važno: Uklanjanje volumena trajno briše sve pohranjene podatke.
Otklanjanje poteškoća
- Problem: Podaci nestaju nakon ponovnog pokretanja kontejnera
Uzrok: Nije korišten volumen ili bind mount
Rješenje: Priključite trajnu pohranu koristeći volumene ili bind mounts - Problem: Pogreške zbog odbijanja dozvole
Uzrok: Nepodudaranje dozvola direktorija domaćina
Rješenje: Prilagodite dozvole koristećichmodilichown - Problem: Volumen se ne montira ispravno
Uzrok: Pogrešna putanja ili sintaksa
Rješenje: Provjerite format montiranja i putanje
Zaključak i sljedeći koraci
Naučili ste kako funkcionira Docker pohrana i kako trajno pohraniti podatke koristeći volumene i bind mounts. Također razumijete kada koristiti svaki pristup u produkciji. Sljedeće, istražite Docker Compose za upravljanje aplikacijama s više kontejnera i definiranje pohrane na strukturiraniji način.