Si të bëni kopje rezervë të vëllimeve tuaja Docker
Vëllimet e dokerit përdoren për të ruajtur të dhënat e vazhdueshme veçmas nga kontejnerët tuaj. Të dhënat që ruhen në një vëllim mbeten të aksesueshme pasi kontejnerët tuaj të ndalojnë, duke ju lejuar të kontejneroni ngarkesat e punës në gjendje.
Edhe pse vëllimet i kalojnë kontejnerët, kjo nuk është mbrojtje e mjaftueshme për aplikimet e prodhimit. Ju duhet të rezervoni vëllimet tuaja në mënyrë që t'i rikuperoni ato pas një fatkeqësie. Krijimi i rezervave të rregullta të volumit siguron që ju të jeni në gjendje të rivendosni mjedisin tuaj nëse hosti juaj Docker rrezikohet ose të dhënat fshihen aksidentalisht.
Menaxhimi i kopjeve rezervë të vëllimit
Docker nuk ka një mekanizëm të integruar për rezervimin e vëllimeve ose eksportimin e përmbajtjes së tyre. Ju duhet të konfiguroni zgjidhjen tuaj për të hyrë në vëllim dhe për të kopjuar të dhënat e tij në destinacionin tuaj rezervë.
Krijimi i një kontejneri të përkohshëm që rrit volumin që ju nevojitet për të rezervuar është zakonisht mënyra më e lehtë për të vazhduar. Shtoni flamurin --volumes-from
në një komandë docker run
për të montuar automatikisht vëllimet e një kontejneri ekzistues në kontejnerin tuaj rezervë. Më pas mund të përdorni mjete të tilla si tar
dhe gzip
për të depozituar një arkiv të përmbajtjes së vëllimit në drejtorinë tuaj të punës.
Këtu është një shembull i plotë i kësaj teknike:
# Create a container that stores data in the "mysql_data" volume
docker run -d \
--name mysql \
-v mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=mysql \
mysql:8
# Start a temporary container to back up the "mysql_data" volume
docker run --rm \
--volumes-from mysql
-v $PWD:/backup-dir \
ubuntu tar cvf /backup-dir/mysql-backup.tar /var/lib/mysql
Flamuri --volumes-from
do të thotë se kontejneri i përkohshëm rezervë merr akses në vëllimet e kontejnerit mysql
. Drejtoria /var/lib/mysql
brenda kontejnerit rezervë ekspozon përmbajtjen e vëllimit sepse kjo është rruga e përdorur nga kontejneri mysql
. Ndarja e shtegut do të prodhojë një arkiv të vëllimit tuaj që mund ta përdorni si rezervë. Ai depozitohet në drejtorinë tuaj të punës për shkak të montimit të lidhjes që është konfiguruar nga flamuri -v
.
Flamuri --rm
do të heqë kontejnerin e rezervës sapo të përfundojë komanda. Kjo e lë arkivin në drejtorinë tuaj të punës, gati për t'u zhvendosur në ruajtje afatgjatë. Ju mund të automatizoni krijimin e kopjeve rezervë duke shtuar komandën docker run
si detyrë cron.
Rivendosja e kopjes rezervë
Ju mund të përdorni një teknikë të ngjashme për të rivendosur kopjen rezervë. Kur jeni duke zëvendësuar përmbajtjen e një vëllimi ekzistues, krijoni një enë tjetër të përkohshme me volumin dhe një montim lidhës në arkivin tuaj rezervë. Ekstraktoni përmbajtjen e arkivit në shtegun e montimit të vëllimit.
$ docker run --rm \
--volumes-from mysql
-v $PWD:/backup-dir
bash -c "cd /var/lib/mysql && tar xvf /backup-dir/mysql-backup.tar"
Kjo mund të jetë e rrezikshme nëse kontejnerët përdorin në mënyrë aktive volumin. Mbishkrimi i skedarëve që janë në përdorim mund të shkaktojë gabime dhe sjellje të papritura. Ju mund të përdorni komandën docker stop
për të ndalur përkohësisht kontejnerët tuaj përpara se t'i riktheni ato me docker start
.
$ docker stop mysql
# Restore the backup
# ...
$ docker start mysql
Krijoni volumin përpara se të nisni kontejnerin tuaj nëse po riktheni një kopje rezervë në një host të ri:
$ docker volume create new_volume
Pastaj montoni këtë vëllim në kontejnerin tuaj të përkohshëm:
docker run --rm \
-v new_volume:/var/lib/mysql
-v $PWD:/backup-dir \
ubuntu tar cvf /backup-dir/mysql-backup.tar /var/lib/mysql
Nisja e kontejnerit të aplikacionit tuaj me të njëjtin volum do të sigurojë qasje në skedarët që keni restauruar:
docker run -d \
--name mysql \
-v new_volume:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=mysql \
mysql:8
Testimi i këtyre procedurave ju lejon të kontrolloni nëse kopjet rezervë do të jenë të përdorshme nëse ndonjëherë përballeni me një fatkeqësi.
Rezervimi i drejtpërdrejtë i vëllimeve
Procedura e përshkruar më sipër është mënyra e rekomanduar për të rezervuar vëllimet e Docker. Sidoqoftë, disa situata mund të shërbehen më mirë duke kopjuar drejtpërdrejt përmbajtjen nga ku vëllimet janë ruajtur në sistemin e skedarëve të hostit tuaj.
Zakonisht do ta gjeni përmbajtjen e vëllimeve tuaja në /var/lib/docker/volumes
. Çdo vëllim ka nëndirektorinë e vet, si p.sh. /var/lib/docker/volumes/mysql
. Brenda kësaj rruge të nivelit të lartë do të gjeni një dosje _data
e cila përmban të gjithë skedarët e ruajtur brenda vëllimit.
Arkivimi i drejtorisë /var/lib/docker/volumes
mund të jetë një mënyrë e përshtatshme për të kopjuar shpejt gjithçka në hostin tuaj. Do t'ju duhet të përdorni sudo
megjithatë sepse gjithçka në këtë rrugë është në pronësi të root
.
Rezervimi i vëllimeve në këtë mënyrë nuk rekomandohet për përdorim të rregullt sepse nuk është i lëvizshëm nëpër instalime. Sistemi i drejtuesit të volumit të Docker do të thotë që të dhënat e volumit nuk do të ruhen domosdoshmërisht në sistemin e skedarëve të hostit tuaj – mund të jenë në një ndarje rrjeti ose në një vendndodhje tjetër të largët. Kjo teknikë duhet të provohet vetëm kur dëshironi një kopje rezervë të shpejtë përpara se të kryeni mirëmbajtjen në një makinë specifike.
Përmbledhje
Vëllimet e Docker duhet të trajtohen me kujdes sepse ato përmbajnë të dhënat e vazhdueshme të aplikacionit tuaj. Krijimi i rezervave të rregullta do t'ju mbrojë nga humbja e të dhënave në rast se hosti juaj rrezikohet ose një proces i gabuar i kontejnerit fshin skedarët gabimisht.
Ndërsa mund të krijoni kopje rezervë duke arkivuar direktorinë e instalimit të Docker, kjo duhet të shmanget kudo që të jetë e mundur. Kontejnerët e përkohshëm rezervë mund të duken të mundimshëm, por ato mund të skriptohen lehtësisht dhe të ofrojnë rezultate të parashikueshme nëpër drejtuesit e vëllimit.
Pasi të keni krijuar një arkiv rezervë vëllimi, mos harroni ta ngarkoni në ruajtje në distancë sa më shpejt të jetë e mundur. Një kopje rezervë e ruajtur në pajisjen nga e ka origjinën nuk do t'ju ndihmojë nëse humbni aksesin ose ndodh një dështim i harduerit.