Duke kuptuar Docker

QĂ« disa muaj po pĂ«rdor docker pĂ«r struktuar procesin e zhvillimit/delivery tĂ« projekteve web. Po ju ofroj lexuesve tĂ« «Habrakhabra» pĂ«rkthimin e njĂ« artikulli hyrĂ«s mbi docker — «Kuptimi i docker».

ÇfarĂ« Ă«shtĂ« docker?

Docker është një platformë e hapur për zhvillimin, dorëzimin dhe funksionimin e aplikacioneve. Docker është krijuar për ta bërë më të shpejtë nxjerrjen në publik të aplikacioneve tuaja. Me docker, mund të ndaheni aplikacionin tuaj nga infrastruktura juaj dhe ta trajtoni infrastrukturën si një aplikacion të menaxhuar. Docker ndihmon në nxjerrjen më shpejt të kodit tuaj, testimin më të shpejtë, publikimin e aplikacioneve dhe reduktimin e kohës mes shkrimit të kodit dhe aktivizimit të tij. Docker e bën këtë me një platformë të lehtë të virtualizimit të kontejnerëve, duke përdorur procese dhe mjete që ndihmojnë në menaxhimin dhe publikimin e aplikacioneve tuaja.

Në thelbin e tij, docker lejon ekzekutimin e pothuajse çdo aplikacioni, në mënyrë të sigurt të izoluar në një kontejner. Izolimi i sigurt ju lejon të ekzekutoni shumë kontejnerë në një host të vetëm në të njëjtën kohë. Natyrshmëria e lehtë e kontejnerit, i cili ekzekutohet pa ngarkesën shtesë të hipervizorit, ju lejon të merrni më shumë nga hardueri juaj.

Platforma dhe mjetet e virtualizimit të kontejnerëve mund të jenë të dobishme në situatat në vijim:

  • paketimi i aplikacionit tuaj (dhe gjithashtu pĂ«rbĂ«rĂ«sit e pĂ«rdorur) nĂ« kontejnerĂ« docker;
  • shpĂ«rndarja dhe dorĂ«zimi i kĂ«tyre kontejnerĂ«ve pĂ«r ekipet tuaja pĂ«r zhvillim dhe testim;
  • publikimi i kĂ«tyre kontejnerĂ«ve nĂ« ambientet tuaja prodhuese, si nĂ« qendrat tĂ« dhĂ«nash po ashtu edhe nĂ« cloud.

Për çfarë mund të përdor docker?

Publikim i shpejtë i aplikacioneve tuaja

Docker është i shkëlqyer për organizimin e ciklit të zhvillimit. Docker lejon zhvilluesit të përdorin kontejnerë lokalë me aplikacione dhe shërbime. Kjo më vonë lejon integrimin me procesin e integrimit dhe publikimit të vazhdueshëm.

Për shembull, zhvilluesit tuaj shkruajnë kodin lokalmente dhe ndajnë stekimin e tyre të zhvillimit (grupin e imazheve docker) me kolegët. Kur ata janë të gatshëm, dërgojnë kodin dhe kontejnerët në një ambient testimi dhe ekzekutojnë çdo test të nevojshëm. Nga ambienti i testimit, ata mund të dërgojnë kodin dhe imazhet në prodhim.

Më e thjeshtë për publikim dhe implementim

Platforma e bazuar në kontejnerët Docker lejon që ngarkesa juaj të migrohet lehtësisht. Kontejnerët Docker mund të funksionojnë në makinën tuaj lokale, si në makinat reale ashtu edhe në makinat virtuale në qendrën e të dhënave, si dhe në cloud.

Portabiliteti dhe natyra e lehtë e Docker e lejon menaxhimin dinamik të ngarkesës suaj. Mund të përdorni Docker për të vendosur ose mbyllur aplikacionin ose shërbimet tuaja. Shpejtësia e Docker e bën këtë gati në kohë reale.

Ngarkesa të larta dhe më shumë ngarkesa

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, për shembull, kur krijoni cloud të vetin ose platformë-si-shërbim (platform-as-service). Por ai gjithashtu është i dobishëm për aplikacione të vogla dhe të mesme kur dëshironi të merrni më shumë nga burimet ekzistuese.

Komponentët kryesorë të Docker

Docker përbëhet nga dy komponente kryesore:

  • Docker: platforma e virtualizimit 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 Docker, i cili merr përsipër ngarkesën e krijimit, ekzekutimit, shpërndarjes së kontejnerëve tuaj. Të dy, klienti dhe serveri mund të punojnë në të njëjtën sistem, mund ta lidhni klientin me një demon të largët Docker. Klienti dhe serveri komunikohet përmes soketëve ose përmes API-së RESTful.

Duke kuptuar Docker

Demon Docker

Siç tregohet në diagram, demon është aktivizuar në makinën pritëse. Përdoruesi nuk interakton drejtpërdrejt me serverin, por përdor klientin për këtë.

Klienti Docker

Klienti Docker, programi Docker — Ă«shtĂ« ndĂ«rfaqja kryesore me Docker. Ai merr komandat nga pĂ«rdoruesi dhe interakton me demonin Docker.

Brenda docker-it

Për të kuptuar se çfarë përbën Docker, duhet të dini për tre komponente:

  • imazhet (images)
  • regjistrat (registries)
  • kontejnerĂ«t

Imazhet

Docker image ë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 të krijuar kontejnerë. Docker lejon që të krijoni lehtësisht imazhe të reja, të përditësoni ato ekzistuese, ose mund të shkarkoni imazhe të krijuara nga të tjerët. Imazhet janë një komponent i ndërtimit të docker-it.

Regjistri

Docker Registry ruan imazhet. Ka regjistra publikë dhe privatë prej të cilëve mund të shkarkoni ose ngarkoni imazhe. Regjistri publik Docker është Docker Hub. Aty ruhen 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.

Kontenierët

KontejnerĂ«t janĂ« tĂ« ngjashĂ«m me direktoritĂ«. NĂ« kontejnerĂ« pĂ«rmban tĂ« gjitha qĂ« nevojiten pĂ«r funksionimin e aplikacionit. Çdo kontejner krijohet nga njĂ« imazh. KontejnerĂ«t mund tĂ« krijohen, fillohen, ndalen, transferohen ose fshihen. Çdo kontejner Ă«shtĂ« i izoluara dhe Ă«shtĂ« njĂ« platformĂ« e sigurt pĂ«r aplikacionin. KontejnerĂ«t janĂ« njĂ« komponent i operimit.

Si funksionon Docker?

Derisa ne dimë se:

  • mund tĂ« krijojmĂ« imazhe, qĂ« pĂ«rmbajnĂ« aplikacionet tona;
  • mund tĂ« krijojmĂ« kontejnerĂ« nga imazhe, pĂ«r tĂ« ekzekutuar aplikacionet;
  • mund tĂ« shpĂ«rndajmĂ« imazhe pĂ«rmes Docker Hub ose ndonjĂ« regjistri tjetĂ«r imazhesh.

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

Si funksionon imazhi?

Ne e dimĂ« tashmĂ« se imazhi Ă«shtĂ« njĂ« model read-only, nga i cili krijohet njĂ« kontejner. Çdo imazh pĂ«rbĂ«het nga njĂ« grup nivelesh. Docker pĂ«rdor sistemin e skedarĂ«ve union pĂ«r tĂ« kombinuar kĂ«to nivele nĂ« njĂ« imazh tĂ« vetĂ«m. Sistemi i skedarĂ«ve union lejon qĂ« skedarĂ«t dhe direktorĂ«t nga sisteme tĂ« ndryshme skedarĂ«sh (dega tĂ« ndryshme) tĂ« mbivendosen nĂ« mĂ«nyrĂ« transparente, duke krijuar njĂ« sistem tĂ« koherent skedarĂ«sh.

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

Në bërthamë 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 imazhet si bazë për të krijuar imazhe të reja. Për shembull, nëse keni një imazh apache, mund ta përdorni atë si imazhin bazë për aplikacionet tuaja ueb.

V notes! Docker zakonisht merr imazhe nga regjistri Docker Hub.

Imazhet Docker mund tĂ« krijohen nga kĂ«to imazhe bazĂ«, hapat e pĂ«rshkrimit pĂ«r krijimin e kĂ«tyre imazheve i quajmĂ« instrukcione. Çdo instrukcion krijon njĂ« imazh tĂ« ri ose njĂ« nivel. Instruksionet do tĂ« jenĂ« kĂ«to veprime:

  • ekzekutimi i komandĂ«s
  • shtimi i njĂ« skedari ose direktoriumi
  • krijimi i njĂ« variabli tĂ« mjedisit
  • pĂ«rcaktimi se çfarĂ« tĂ« ekzekutohet kur fillohet kjo konteiner i kĂ«tij imazhi

Këto instrukcione ruhen në një skedar Dockerfile. Docker i lexon këto Dockerfile, kur mblidhet imazhi, ekzekuton këto instrukcione, dhe kthen imazhin përfundimtar.

Si funksionon regjistri docker?

Regjistri është një magazinë imazhesh docker. Pasi të krijoni një imazh, mund ta publikoni atë në regjistrin publik Docker Hub ose në regjistrin tuaj personal.

Me ndihmën e klientit docker mund të kërkoni imazhe tashmë të publikuara 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 imazhe. Kërkimi dhe shkarkimi i imazheve nga depo publike është e disponueshme për të gjithë. Përmbajtja e depo private nuk shfaqet në rezultatet e kërkimit. Dhe vetëm ju dhe përdoruesit tuaj mund të merrni këto imazhe dhe të krijoni konteinerë prej tyre.

Si funksionon konteineri?

Konteineri përbëhet nga një sistem operativ, skedarë përdoruesi dhe meta të dhëna. Siç e dimë, çdo konteiner krijohet nga një imazh. Ky imazh i thotë docker-it se çfarë ndodhet në konteiner, cilin proces të ekzekutojë kur iniciohet konteineri dhe të dhëna të tjera konfigurimi. Imazhi docker është i disponueshëm vetëm për lexim. Kur docker inicializon konteinerin, ai krijon një nivel për lexim/shkrim mbi imazhin (duke përdorur sistemin e skedarëve union, siç u përmend më parë), në të cilin mund të ekzekutohet aplikacioni.

ÇfarĂ« ndodh kur iniciohet njĂ« konteiner?

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

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

Le të shqyrtojmë këtë komandë. Klienti fillon me këtë komandë docker, me opsionin run, e cila shpall se do të nisë një kontejner të ri. Kërkesat minimale për nisjen e kontejnerit janë atributet e mëposhtme:

  • cili imazh duhet tĂ« pĂ«rdoret pĂ«r krijimin e kontejnerit. NĂ« rastin tonĂ« ubuntu
  • komandĂ«n qĂ« dĂ«shiron tĂ« nisĂ«sh kur kontejneri tĂ« jetĂ« nisur. NĂ« rastin tonĂ« /bin/bash

ÇfarĂ« ndodh nĂ«n kapak, kur ne nisim kĂ«tĂ« komandĂ«?

Docker, hapat në rend, bën si më poshtë:

  • shkarkon imazhin ubuntu: docker kontrollon nĂ«se imazhi ubuntu Ă«shtĂ« nĂ« makinĂ«n lokale, dhe nĂ«se nuk Ă«shtĂ« - e shkarkon atĂ« nga Docker Hub. NĂ«se imazhi Ă«shtĂ« nĂ« dispozicion, ai e pĂ«rdor atĂ« pĂ«r krijimin e kontejnerit;
  • krijon kontejnerin: kur imazhi Ă«shtĂ« marrĂ«, docker e pĂ«rdor atĂ« pĂ«r krijimin e kontejnerit;
  • fillon sistemin e skedarĂ«ve dhe monton nivelin read-only: kontejneri Ă«shtĂ« krijuar nĂ« sistemin e skedarĂ«ve dhe niveli read-only Ă«shtĂ« shtuar imazhit;
  • fillon rrjetin/urĂ«n: krijon njĂ« ndĂ«rfaqe rrjeti qĂ« lejon docker tĂ« komunikojĂ« me makinĂ«n host;
  • Caktimi i adresĂ«s IP: gjen dhe cakton adresĂ«n;
  • Nis procesin e specifikuar: 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Ă« vĂ«zhgosh se si funksionon aplikacioni yt.

Tani keni një kontejner në punë. Mund të menaxhosh kontejnerin tënd, të ndërveprosh me aplikacionin tënd. Kur të vendosësh të ndalosh aplikacionin, fshi 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 funksionalitetet e përmendura më lartë.

Hapësira emrash (namespaces)

Docker përdor teknologjinë namespaces për të organizuar hapësira të izoluara pune, të cilat i quajmë kontejnerë. Kur nisim një kontejner, docker krijon një grup hapësirash emrash për këtë kontejner.

Kjo krijon një nivel të izoluar, çdo aspekt i kontejnerit është i nisur në hapësirën e tij emër dhe nuk ka akses në sistemin jashtë.

Lista e disa hapësirave emrash që përdor docker:

  • pid: pĂ«r izolimin e procesit;
  • net: pĂ«r menaxhimin e ndĂ«rfaqeve rrjetĂ«;
  • 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 unix pĂ«r ndarjen e kohĂ«s).

Grupet e kontrollit (control groups)

Docker gjithashtu pĂ«rdor teknologjinĂ« cgroups ose dhe grupet e kontrollit. ÇelĂ«si i funksionimit tĂ« aplikacionit nĂ« izolim Ă«shtĂ« ofrimi i burimeve tĂ« aplikacionit vetĂ«m ato qĂ« dĂ«shironi. Kjo garanton qĂ« kontejnerĂ«t do 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, mund tĂ« limitoni sasinĂ« e memories qĂ« njĂ« kontejner mund tĂ« pĂ«rdorĂ«.

Union File System

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

Formatet e kontejnerëve

Docker i kombinon këto komponente në një mbështjellës, të cilin ne e quajmë format kontejneri. Formati i përdorur nga default quhet libcontainer. Gjithashtu, docker mbështet formatin tradicional të kontejnerëve në Linux përmes LXC. Në të ardhmen, Docker ndoshta do të mbështesë formate të tjera kontejnerësh. Për shembull, duke u integruar me BSD Jails ose Solaris Zones.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster