A duhet të ekzekutoni një bazë të dhënash në Docker?
Kontejnerimi i ngarkesave të punës së serverëve po bëhet gjithnjë e më i popullarizuar dhe po bëhet gjithnjë e më e zakonshme të shohësh vendosjet e serverëve të uebit që funksionojnë në kontejnerë. A mund të zbatohen të njëjtat përfitime për bazat e të dhënave?
Docker mund të trajtojë ngarkesat shtetërore të punës
Është më mirë ta filloni këtë duke bërë një pyetje tjetër: Anëse keni edhe një bazë të dhënash në Docker? Në përgjithësi, Docker nuk është krijuar për shërbime shtetërore. Një nga pikat kryesore të shitjes së kontejnerëve është se ato mund të ndalen dhe të fillojnë sipas dëshirës, zakonisht duke u lidhur me një burim autoritar të dhënash, si një bazë të dhënash, për të ruajtur gjendjen e tyre. Të gjitha të dhënat në kontejner janë kalimtare dhe shkatërrohen kur kontejneri fshihet.
Kjo e bën funksionimin e ngarkesave shtetërore veçanërisht sfiduese, por për fat Docker ka disa mjete për t'u marrë me gjendjen: montimet e volumit dhe të lidhjes. Këto ju lejojnë të montoni një vendndodhje në makinën pritës në një vend në kontejner, i cili do të ruajë të dhënat edhe kur kontejneri mbyllet. Në këtë mënyrë, ju mund të përdorni kontejnerët për një kohë të gjatë pa u shqetësuar për humbjen e të dhënave.
Montimet e volumit janë mënyra e preferuar për trajtimin e shumicës së skenarëve. Ato ju lejojnë të krijoni një vëllim, i cili menaxhohet nga Docker:
docker volume create my-volume
Pastaj montoni atë vëllim në një vend të synuar brenda kontejnerit:
docker run --mount source=my-volume,target=/app
Montimet e lidhjes janë më të thjeshta. Ato janë ato që vëllimet përdorin nën kapuç, por ato ju lejojnë të vendosni manualisht vendndodhjen në diskun pritës në vend që ta menaxhoni atë përmes Docker.
docker run ~/nginxlogs:/var/log/nginx
Në praktikë, përdorimi i këtyre montimeve mund të jetë pak më i komplikuar. Shumë shërbime të menaxhuara Docker, si ECS e AWS, ose Kubernetes e menaxhuar, nuk ju japin akses të drejtpërdrejtë në serverin themelor dhe si i tillë nuk do të jeni në gjendje të krijoni drejtpërdrejt lidhje lidhëse. Zakonisht kjo zgjidhet me një shërbim si EFS, i cili lejon montimin në kontejnerë ECS, ose me një dyqan të jashtëm të të dhënave, si një bazë të dhënash.
A duhet të zgjidhni Docker për bazën tuaj të të dhënave?
Docker në përgjithësi nuk është i shkëlqyeshëm për trajtimin e gjendjes. Ngarkesat e punës të bazuara në docker zakonisht e transferojnë këtë problem në bazat e të dhënave. Me një bazë të dhënash që është zgjidhja e problemit, a është praktike të vendosni bazën tuaj të të dhënave në Docker?
Kryesisht, përgjigjja është jo zakonisht. Docker ka bërë një rrugë të gjatë që nga fillimi i tij, dhe nuk është më një ide e tmerrshme ose e gabuar për të kontejneruar bazat e të dhënave. Sigurisht që mund të bëhet dhe ka disa përfitime për të. Sidoqoftë, për shumicën e ngarkesave të përgjithshme të punës, përfitimet nuk peshojnë më shumë se komplikimet.
Për të parë pse, le të shohim përfitimet që sjell Docker në tryezë:
- Shkallëzimi i lehtë: serverët mund të krijohen dhe shkatërrohen shpejt për të përmbushur kërkesën
- Vegla më e lehtë CI/CD: ndërtimet e automatizuara janë të parëndësishme
- Kodifikimi i infrastrukturës suaj: të gjitha bibliotekat dhe konfigurimet themelore trajtohen në Dockerfile
Shumica e tyre nuk transferohen saktësisht në ngarkesat e punës së bazës së të dhënave, të cilat shpesh janë përpjekje afatgjata që favorizojnë integritetin e të dhënave mbi të gjitha. Në përgjithësi nuk dëshironi të përshkallëzoni automatikisht shumicën e bazave të të dhënave; ata zakonisht nuk marrin përditësime të rregullta të kodit dhe si të tillë nuk përfitojnë aq shumë nga funksionimi në kontejnerë. Dhe, nëse gjithsesi thjesht po montoni një makinë ruajtëse lokale, pse të mos e përdorni atë jashtë Docker?
Nëse po kërkoni të çliroheni nga kompleksiteti i menaxhimit të bazave të të dhënave, Docker nuk është mjeti për këtë punë. Është thjesht një ndërlikim i panevojshëm për një ngarkesë pune që mund të funksionojë lehtësisht në një VPS standarde. Ka të ngjarë të jeni shumë më mirë duke përdorur një bazë të dhënash të menaxhuar plotësisht si shërbim, si RDS e AWS. Kjo sjell shumë nga automatizimi për të cilin është i mirë Docker, pa asnjë dhimbje koke për ta bërë vetë.
Vendi kryesor ku Docker mund të jetë i dobishëm për ngarkesat e punës së bazës së të dhënave është në mjediset e zhvillimit. Docker e bën të lehtë rrotullimin e bazave të të dhënave të reja me konfigurime të ndryshme, gjë që bën testimin e shpejtë. Megjithatë, në prodhim, rregullat janë përgjithësisht më të rrepta.