Duke kuptuar Docker

Kam disa muaj po përdor docker për të strukturuar procesin e zhvillimit/dhënies së projekteve në internet. Ju ofroj lexuesve të «Habrakhabra» përkthimin e artikullit hyrës për docker — «Kuptimi i docker-it».

Çfarë është docker?

Docker është një platformë e hapur për zhvillimin, dorëzimin dhe operimin e aplikacioneve. Docker është dizajnuar për të lehtësuar publikimin më të shpejtë të aplikacioneve tuaja. Me docker, mund të ndash aplikacionin tënd nga infrastruktura dhe të menaxhosh infrastrukturën si një aplikacion të menaxhuar. Docker ndihmon në publikimin e kodit tuaj më shpejt, testimin më shpejt, publikimin e aplikacioneve më shpejt dhe zvogëlimin e kohës midis shkruarjes dhe ekzekutimit të kodit. Docker e arrin këtë përmes një platforme të lehtë virtualizimi të kontejnerëve, duke përdorur procese dhe mjete që ndihmojnë në menaxhimin dhe publikimin e aplikacioneve tuaja.

Në thelb, docker lejon ekzekutimin e praktikisht çdo aplikacioni, i izoluar në mënyrë të sigurt në një kontejner. Izolimi i sigurt ju lejon të ekzekutoni shumë kontejnerë njëkohësisht në një host. Natyra e lehtë e kontejnerit, i cili ekzekutohet pa ngarkesë shtesë nga hipervizori, ju lejon të arrini më shumë nga hardueri juaj.

Platforma dhe mjetet e virtualizimit të kontejnerëve mund të jenë të dobishme në rastet e mëposhtme:

  • paketimi i aplikacionit tuaj (dhe gjithashtu komponentëve të përdorur) në kontejnerë docker;
  • distribuimi dhe dorëzimi i këtyre kontejnerëve për ekipet tuaja për zhvillim dhe testim;
  • publikimi i këtyre kontejnerëve në prodhimet tuaja, si në qendrat e të dhënave ashtu edhe në cloud.

Për çfarë mund ta përdor docker-in?

Publikim i shpejtë i aplikacioneve tuaja

Docker është i përkryer për organizimin e ciklit të zhvillimit. Docker lejon zhvilluesit të përdorin kontejnerë lokalë me aplikacione dhe shërbime. Kjo më pas lejon integrimin me procesin e vazhdueshëm të integrimit dhe publikimit (continuous integration and deployment workflow).

Për shembull, zhvilluesit tuaj shkruajnë kodin në mënyrë lokale dhe ndajnë grumbullin e zhvillimit (grupi i imazheve të docker-it) me kolegët e tyre. Kur janë gati, dërgojnë kodin dhe kontejnerët në ambientin e testimit dhe ekzekutuan testet e nevojshme. Nga ambienti i testimit ata mund të dërgojnë kodin dhe imazhet në prodhim.

Publikim dhe shpërndarje më e thjeshtë

Platforma e bazuar në kontejnerë docker lejon portimin e lehtë të ngarkesës suaj. Kontejnerët docker mund të funksionojnë në makinerinë tuaj lokale, në kompjuterin tuaj fizik ose virtual, në qendrat e të dhënave, ose në cloud.

Portueshmëria dhe natyra e lehtë e docker-it lejon menaxhimin dinamik të ngarkesës tuaj. Ju mund të përdorni docker për të ndihmuar në publikimin ose ndalimin e aplikacionit ose shërbimeve tuaja. Shpejtësia e docker-it e bën këtë gati në kohë reale.

Ngarkesa të larta dhe më shumë ngarkesa të dobishme

Docker është i lehtë dhe i shpejtë. Ai ofron një alternativë të qëndrueshme dhe të përballueshme ndaj makinave virtuale të bazuara në hipervizor. Ai është veçanërisht i dobishëm në kushte ngarkese të larta, siç është krijimi i një cloud-i ose platformës si shërbim (platform-as-service). Por gjithashtu është i dobishëm për aplikacione të vogla dhe të mesme, kur dëshironi të merrni më shumë nga burimet që keni.

Komponentët kryesorë të Docker

Docker përbëhet nga dy komponentë kryesorë:

  • Docker: platformë virtualizimi me kod të hapur;
  • Docker Hub: platforma jonë si shërbim për shpërndarjen dhe menaxhimin e kontejnerëve docker.

Shënim! Docker shpërndahet sipas licencës Apache 2.0.

Arkitektura e Docker

Docker përdor një arkitekturë klient-server. Klienti docker komunikon me demonin e docker-it, i cili merr përsipër ngarkesën e krijimit, ekzekutimit dhe shpërndarjes së kontejnerëve tuaj. Të dy, klienti dhe serveri, mund të punojnë në një sistem të vetëm, por mund të lidhni klientin me një demon docker të largët. Klienti dhe serveri komunikojnë përmes një socket-i ose përmes një API RESTful.

Duke kuptuar Docker

Demon i Docker-it

Siç tregohet në diagram, demo funksionon në makinerinë host. Përdoruesi nuk ndërvepron drejtpërdrejt me serverin, por përdor klientin për këtë.

Klienti i Docker-it

Klienti docker, programi docker - është ndërfaqja kryesore me Docker. Ai merr komandat nga përdoruesi dhe ndërvepron me demonin docker.

Brenda docker-it

Për të kuptuar se çfarë përbën docker-in, ju nevojitet të dini për tre komponentë:

  • imazhe (images)
  • regjistrat (registries)
  • kontejnerë

Imazhet

Docker-i është një model read-only. Për shembull, një imazh mund të përmbajë sistemin operativ Ubuntu me Apache dhe një aplikacion mbi të. Imazhet përdoren për krijimin e kontejnerëve. Docker lejon krijimin e lehtë të imazheve të reja, përditësimin e atyre ekzistuese, ose mund të shkarkoni imazhe të krijuara nga të tjerët. Imazhet janë komponentë të ndërtimit të docker-it.

Regjistri

Docker registry ruan imazhet. Ka regjistra publike dhe private, nga të cilat mund të shkarkoni ose ngarkoni imazhe. Regjistri publik i Docker është Docker Hub. Aty ruhet një koleksion i madh imazhesh. Siç e dini, imazhet mund të krijohen nga ju ose mund të përdorni imazhe të krijuara nga të tjerët. Regjistrat janë një komponent i shpërndarjes.

Kontejnerët

Kontejnerët janë të ngjashëm me директории. Në kontejnere gjendet gjithçka që nevojitet për të punuar një aplikacion. Çdo konteiner krijohet nga një imazh. Kontejnerët mund të krijohen, nisen, ndalohen, transferohen ose fshihen. Çdo konteiner është i izoluar dhe është një platformë e sigurt për aplikacionin. Kontejnerët janë një komponent funksionimi.

Si funksionon Docker?

Deri tani dimë se:

  • mund të krijojmë imazhe që përmbajnë aplikacionet tona;
  • mund të krijojmë konteinerë nga imazhet për të nisur aplikacione;
  • mund të shpërndajmë imazhe përmes Docker Hub ose një regjistri tjetër imazhesh.

Le të shohim se si kombinohen këto komponente.

Si funksionon imazhi?

Ne tashmë e dimë se imazhi është një шаблон read-only, nga i cili krijohet një konteiner. Çdo imazh përbëhet nga një grup nivelesh. Docker përdor filesystem union për të kombinuar këto nivele në një imazh. Filesystem union lejon që skedarët dhe direktoritë nga sisteme të ndryshme skedari (dallë tjera) të mbivendosen në mënyrë të dukshme, duke krijuar një sistem koherent skedari.

Një nga arsyet pse docker është i lehtë është përdorimi i tillë nivelesh. Kur ndryshoni imazhin, për shembull duke përditësuar aplikacionin, krijohet një nivel i ri. Kështu, pa zëvendësimin e të gjithë imazhit ose ricreimin e tij, siç mund t'ju duhet të bëni me një makinë virtuale, vetëm niveli shtohet ose përditësohet. Dhe nuk keni nevojë të shpërndani të gjithë imazhin e ri, shpërndahet vetëm përditësimi, çka e bën shpërndarjen e imazheve më të thjeshtë dhe më të shpejtë.

Në themel të çdo imazhi është një imazh bazë. Për shembull, ubuntu, imazhi bazë i Ubuntu, ose fedora, imazhi bazë i shpërndarjes Fedora. Po ashtu mund të përdorni imazhe si bazë për të krijuar imazhe të reja. Për shembull, nëse keni një imazh apache, mund ta përdorni si imazhin bazë për aplikacionet tuaja në web.

Kujdes! Docker zakonisht merr imazhet nga regjistri Docker Hub.

Imazhet Docker mund të krijohen nga këto imazhe bazë, hapat përshkruese për krijimin e këtyre imazheve ne i referojmë si instrukcione. Çdo instrukcion krijon një imazh të ri ose një nivel. Instruksionet do të jenë veprimet e mëposhtme:

  • ekzekutimi i një komande
  • shtimi i një skedari ose direktorie
  • krijimi i një variabli ambienti
  • shënimi se çfarë duhet të ekzekutohet kur fillohet ky konteiner i këtij imazhi

Këto instrukcione ruhen në një skedar Dockerfile. Docker e lexon këtë Dockerfile, kur ndërtone imazhin, ekzekuton këto instrukcione dhe kthehet në imazhin përfundimtar.

Si funksionon regjistri docker?

Regjistri është një depo e imazheve docker. Pas krijimit të një imazhi, mund ta publikoni në regjistrin publik Docker Hub ose në regjistrin tuaj personal.

Me ndihmën e klientit docker mund të kërkoni imazhe të publikuara tashmë dhe t'i shkarkoni ato në makinën tuaj me docker për të krijuar konteinerë.

Docker Hub ofron depo publike dhe private për imazhet. Kërkimi dhe shkarkimi i imazheve nga depo publike është në dispozicion për të gjithë. Përmbajtja e depozita private nuk përfshihet në rezultatet e kërkimit. Vetëm ju dhe përdoruesit tuaj mund të merrni këto imazhe dhe të krijoni konteinerë prej tyre.

Si funksionon një konteiner?

Konteineri përbëhet nga një sistem operativ, skedarë të përdoruesve dhe metadatat. Siç e dimë, çdo konteiner krijohet nga një imazh. Ky imazh i tregon docker-it se çfarë ndodhet në konteiner, cilin proces duhet të nisen kur fillohet konteineri dhe të dhëna të tjera konfiguruese. Imazhi Docker është vetëm për lexim. Kur docker fillon një konteiner, krijon një nivel për lexim/shkrim mbi imazhin (duke përdorur filesystem union, siç u përmend më parë), në të cilin mund të ekzekutohet aplikacioni.

Çfarë ndodh kur startohet një konteiner?

Ose me ndihmën e programit docker, ose me ndihmën e API-së RESTful, klienti docker i thotë demonit docker të fillojë konteinerin.

$ sudo docker run -i -t ubuntu /bin/bash

Le të shqyrtojmë këtë komandë. Klienti nis me komanden docker, me opsionin run, i cili tregon se do të nisë një konteiner të ri. Kërkesat minimale për të nisur një konteiner janë atributet e mëposhtme:

  • cili imazh të përdoret për të krijuar konteinerin. Në rastin tonë ubuntu
  • komanda që dëshironi të nisni kur të fillohet konteineri. Në rastin tonë /bin/bash

Çfarë ndodh nën kapak kur e fillojmë këtë komandë?

Docker, me radhë, bën të mëposhtme:

  • shkarkon imazhin ubuntu: docker kontrollon nëse imazhi ekziston ubuntu në makinën lokale, dhe nëse nuk ekziston — atëherë e shkarkon atë nga Docker Hub. Nëse imazhi është i pranishëm, ai përdor atë për të krijuar kontejnerin;
  • krijon kontejnerin: kur imazhi është marrë, docker e përdor atë për të krijuar kontejnerin;
  • inisializon sistemin e skedarëve dhe monton një nivel read-only: kontejneri është krijuar në sistemin e skedarëve dhe niveli read-only është shtuar nga imazhi;
  • inisializon rrjetin/muçi: krijon një ndërfaqe rrjeti që lejon docker-in të komunikojë me makinën host;
  • Vendosja e adresës IP: gjen dhe caktuar adresën;
  • Nis procesin e caktuar: nis aplikacionin tuaj;
  • Përpunon dhe nxjerr daljen e aplikacionit tuaj: lidhet dhe regjistron hyrjen standarde, daljen dhe rrjedhën e gabimeve të aplikacionit tuaj, në mënyrë që të mund të ndiqni se si funksionon aplikacioni juaj.

Tani keni një kontejner funksional. Mund të menaxhoni kontejnerin tuaj, të ndërveproni me aplikacionin tuaj. Kur të vendosni të ndaloni aplikacionin, fshini kontejnerin.

Teknologjitë e Përdorura

Docker është shkruar në Go dhe përdor disa mundësi të bërthamës Linux për të realizuar funksionalitetin e mësipërm.

Hapësirat emërore (namespaces)

Docker përdor teknologjinë namespaces për të organizuar hapësira të izoluara të punës, të cilat i quajmë kontejnerë. Kur ne nisnim një kontejner, docker krijon një grup hapësirash emërore për këtë kontejner.

Kjo krijon një nivel izolimi, çdo aspekt i kontejnerit është i nisur në hapësirën e tij emërore dhe nuk ka qasje në sistemin e jashtëm.

Një listë e disa hapësirave emërore që përdor docker:

  • pid: për izolimin e proceseve;
  • net: për menaxhimin e ndërfaqeve rrjeti;
  • ipc: për menaxhimin e burimeve IPC. (ICP: Komunikimi ndërproçesor);
  • mnt: për menaxhimin e pikave të montimit;
  • utc: për izolimin e bërthamës dhe kontrollin e gjeneratës së versioneve (UTC: sistemi i ndarjes së kohës Unix).

Grupet e Kontrollit (Control groups)

Docker gjithashtu përdor teknologjinë cgroups ose grupet e kontrollit. Çelësi për të punuar aplikacionin në izolim, duke ofruar aplikacionit vetëm ato burime që dëshiron të ofrosh. Kjo garanton që kontejnerët të jenë fqinjë të mirë. Grupet e kontrollit lejojnë ndarjen e burimeve të disponueshme të harduerit dhe, nëse është e nevojshme, vendosjen e kufijve dhe kufizimeve. Për shembull, kufizoni mundësinë e memorjes për një kontejner.

Sistemi i Skedarëve Union

Sistemi i Skedarëve Union ose UnionFS është një sistem skedari që funksionon duke krijuar nivele, duke e bërë atë shumë të lehtë dhe të shpejtë. Docker përdor UnionFS për të krijuar blloqe nga të cilat ndërtohet kontejneri. Docker mund të përdorë disa variante UnionFS duke përfshirë: AUFS, btrfs, vfs dhe DeviceMapper.

Formatet e kontejnerëve

Docker kombinon këto komponentë në një mbështjellje, të cilën e quajmë format kontejneri. Formati i përdorur si parazgjedhje quhet libcontainer. Po ashtu, docker mbështet formatin tradicional të kontejnerëve në Linux me ndihmën e LXC. Në të ardhmen, Docker mund të mbështesë formate të tjera kontejnerësh. Për shembull, duke u integruar me BSD Jails ose Solaris Zones.

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster