Cili është ndryshimi midis Docker dhe një makine virtuale (VM)?
![](common-images/whats-the-difference-between-docker-and-a-virtual-machine-vm/c454d054.png)
Kontejnerët Docker ofrojnë një shërbim të ngjashëm me makinat virtuale, duke siguruar një mjedis të izoluar për aplikimet për t'u ekzekutuar, por ato janë në thelb dy teknologji të ndryshme. Ne do të diskutojmë ndryshimet dhe çfarë e bën Docker kaq të dobishëm.
Çfarë e bën Docker kaq të dobishëm?
Qëllimi kryesor i një makinerie virtuale është të ndajë një server të madh në copa më të vogla. Pjesa e rëndësishme është se ai izolon proceset që ekzekutohen në çdo VM. Për shembull, ofruesi juaj i pritjes mund të ketë një makinë me 32 bërthama dhe ta ndajë atë në tetë VM me 4 bërthama që ua shet klientëve të ndryshëm. Kjo zvogëlon kostot për të gjithë, dhe ato janë të shkëlqyera nëse jeni duke ekzekutuar shumë procese ose keni nevojë për qasje të plotë SSH në harduerin themelor.
Sidoqoftë, nëse jeni duke ekzekutuar vetëm një aplikacion, mund të përdorni më shumë burime sesa duhet. Për të ekzekutuar atë aplikacion të vetëm, hipervizori duhet të rrotullojë një sistem të tërë operativ të ftuar, që do të thotë se makina 32 bërthamore po ekzekuton tetë kopje të Ubuntu. Për më tepër, ju keni një makinë virtuale për çdo rast.
![](common-images/whats-the-difference-between-docker-and-a-virtual-machine-vm/bc4f8762.png)
Docker paraqet një zgjidhje më të mirë. Kontejnerët Docker ofrojnë izolim pa shpenzimet e sipërme të makinave virtuale. Çdo kontejner funksionon në mjedisin e vet, të ndarë me hapësira emrash Linux, por pjesa e rëndësishme është që kodi në kontejnerët funksionon drejtpërdrejt në makinë. Nuk ka asnjë emulim ose virtualizim të përfshirë.
Ka ende pak shpenzime për shkak të rrjetëzimit dhe ndërfaqes me sistemin pritës, por aplikacionet në Docker përgjithësisht funksionojnë afër shpejtësive të metalit të zhveshur, dhe sigurisht shumë më shpejt se VPS-ja juaj mesatare. Ju nuk keni nevojë të ekzekutoni 8 kopje të Ubuntu, vetëm një, gjë që e bën të lirë ekzekutimin e shumë kontejnerëve Docker në një host. Shërbime si Shërbimi i Elastic Container të AWS dhe GCP's Cloud Run sigurojnë mënyra për të ekzekutuar kontejnerë individualë pa ofruar një server themelor.
Kontejnerët paketojnë të gjitha varësitë që aplikacioni juaj duhet të ekzekutojë, duke përfshirë bibliotekat dhe binarët që përdor OS. Ju mund të ekzekutoni një kontejner CentOS në një server Ubuntu; ata të dy përdorin kernel Linux, dhe ndryshimi i vetëm është binarët dhe bibliotekat e përfshira për OS.
Dallimi kryesor me kontejnerët Docker është se në përgjithësi nuk do të keni akses SSH në kontejner. Sidoqoftë, nuk ju nevojitet saktësisht - konfigurimi trajtohet i gjithi nga vetë skedari i kontejnerit dhe nëse doni të bëni përditësime, do t'ju duhet të shtyni një version të ri të kontejnerit.
Për shkak se ky konfigurim ndodh i gjithë në kod, ju lejon të përdorni kontrollin e versionit si Git për softuerin e serverit tuaj. Për shkak se kontejneri juaj është një imazh i vetëm, e bën të lehtë gjurmimin e ndërtimeve të ndryshme të kontejnerit tuaj. Me Docker, mjedisi juaj i zhvillimit do të jetë saktësisht i njëjtë me mjedisin tuaj të prodhimit, dhe gjithashtu i njëjtë me mjedisin e zhvillimit të të gjithëve, duke lehtësuar problemin e është i prishur në makinën time!
Nëse dëshironi të shtoni një server tjetër në grupin tuaj, nuk do të duhet të shqetësoheni për rikonfigurimin e atij serveri dhe riinstalimin e të gjitha varësive që ju nevojiten. Pasi të ndërtoni një enë, mund të rrotulloni lehtësisht njëqind raste të atij kontejneri, pa përfshirë shumë konfigurime. Kjo gjithashtu mundëson shkallëzim automatik shumë të lehtë, i cili mund t'ju kursejë shumë para.
Anët negative të Docker
Sigurisht, Docker nuk do të zëvendësojë makinat virtuale së shpejti. Ato janë dy teknologji të ndryshme, dhe makinat virtuale kanë ende shumë avantazhe.
Rrjetëzimi në përgjithësi është më i përfshirë. Në një makinë virtuale, zakonisht keni pajisje të dedikuara të rrjetit të ekspozuar drejtpërdrejt tek ju. Mund të konfiguroni lehtësisht muret e zjarrit, të vendosni aplikacione për të dëgjuar në porte të caktuara dhe të ekzekutoni ngarkesa të ndërlikuara pune si balancimi i ngarkesës me HAProxy. Në Docker, për shkak se të gjithë kontejnerët funksionojnë në të njëjtin host, kjo shpesh është pak më e ndërlikuar. Sidoqoftë, zakonisht, shërbimet specifike të kontejnerëve si Shërbimi Elastic Container i AWS dhe GCP's Cloud Run do ta ofrojnë këtë rrjetë si pjesë e shërbimit të tyre.
Performanca në sistemet operative jo vendase është ende e barabartë me makinat virtuale. Ju nuk mund të ekzekutoni një kontejner Linux në një makinë pritëse të Windows, kështu që Docker për Windows në fakt përdor një nënsistem Windows për Linux VM për të trajtuar kontejnerët që funksionojnë. Docker në thelb siguron një shtresë abstraksioni në krye të makinës virtuale në këtë rast.
Të dhënat e vazhdueshme janë gjithashtu pak të komplikuara. Kontejnerët Docker janë projektuar të jenë pa shtetësi. Kjo mund të rregullohet me montimet e volumit, të cilat montojnë një drejtori në host në kontejner, dhe shërbime si ECS ju lejojnë të montoni vëllime të përbashkëta. Sidoqoftë, nuk mundet ruajtjen e të dhënave në një server të rregullt dhe nuk do të dëshironit vërtet të provoni dhe të ekzekutoni një bazë të dhënash prodhimi në Docker.