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 â .
Ă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.

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ë . 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 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 . 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 . 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
