Kuptimi i Docker

Unë kam përdorur Docker për disa muaj tani për të strukturuar procesin e zhvillimit/dorëzimit të projekteve në internet. Unë u ofroj lexuesve të Habrakhabr një përkthim të artikullit hyrës rreth docker - "Të kuptuarit e dokerit".

Çfarë është docker?

Docker është një platformë e hapur për zhvillimin, shpërndarjen dhe funksionimin e aplikacioneve. Docker është krijuar për të ofruar aplikacionet tuaja më shpejt. Me docker, ju mund të shkëputni aplikacionin tuaj nga infrastruktura juaj dhe ta trajtoni infrastrukturën si një aplikacion të menaxhuar. Docker ju ndihmon të dërgoni kodin tuaj më shpejt, të testoni më shpejt, të dërgoni aplikacionet më shpejt dhe të reduktoni kohën midis shkrimit të kodit dhe ekzekutimit të kodit. Docker e bën këtë përmes një platforme të lehtë virtualizimi të kontejnerëve, duke përdorur procese dhe shërbime që ju ndihmojnë të menaxhoni dhe dorëzoni aplikacionet tuaja.

Në thelbin e tij, docker ju lejon të ekzekutoni pothuajse çdo aplikacion, të izoluar në mënyrë të sigurt në një enë. Izolimi i sigurt ju lejon të përdorni shumë kontejnerë në të njëjtin host në të njëjtën kohë. Natyra e lehtë e kontejnerit, e cila funksionon pa ngarkesën shtesë të një hipervizori, ju lejon të përfitoni më shumë nga hardueri juaj.

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

  • paketimin e aplikacionit tuaj (dhe komponentëve që përdorni) në kontejnerë docker;
  • shpërndarja dhe shpërndarja e këtyre kontejnerëve tek ekipet tuaja për zhvillim dhe testim;
  • duke i vendosur këto kontejnerë në vendet tuaja të prodhimit, si në qendrat e të dhënave ashtu edhe në retë.

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

Publikoni shpejt aplikacionet tuaja

Docker është i shkëlqyeshëm për organizimin e ciklit të zhvillimit. Docker lejon zhvilluesit të ekzekutojnë kontejnerë lokalë me aplikacione dhe shërbime. E cila më pas ju lejon të integroheni me procesin e integrimit të vazhdueshëm dhe rrjedhës së punës së vendosjes.

Për shembull, zhvilluesit tuaj shkruajnë kodin në nivel lokal dhe ndajnë grupin e tyre të zhvillimit (një grup imazhesh Docker) me kolegët. Kur të jenë gati, ata shtyjnë kodin dhe kontejnerët në vendin e testimit dhe kryejnë çdo test të nevojshëm. Nga vendi i testimit, ata mund të dërgojnë kodin dhe imazhet në prodhim.

Shtrimi dhe shpalosja më e lehtë

Platforma e bazuar në kontejner docker e bën të lehtë transferimin e ngarkesës suaj. Kontejnerët Docker mund të funksionojnë në makinën tuaj lokale, ose reale ose në një makinë virtuale në një qendër të dhënash ose në cloud.

Transportueshmëria dhe natyra e lehtë e docker-it e bën të lehtë menaxhimin dinamik të ngarkesës suaj të punës. Ju mund të përdorni docker për të vendosur ose mbyllur aplikacionin ose shërbimet tuaja. Shpejtësia e dokerit lejon që kjo të bëhet pothuajse në kohë reale.

Ngarkesa më të larta dhe më shumë ngarkesë

Docker është i lehtë dhe i shpejtë. Ai siguron një alternativë elastike dhe me kosto efektive për makinat virtuale të bazuara në hipervizor. Është veçanërisht i dobishëm në mjedise me ngarkesë të lartë, për shembull, kur krijoni renë tuaj kompjuterike ose platformë si shërbim. Por është gjithashtu i dobishëm për aplikacione të vogla dhe të mesme kur dëshironi të përfitoni më shumë nga burimet që keni.

Komponentët kryesorë të Docker-it

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

  • Docker: një platformë virtualizimi me burim të hapur;
  • Docker Hub: Platforma jonë-si-shërbim për shpërndarjen dhe menaxhimin e kontejnerëve Docker.

Shënim! Docker shpërndahet nën licencën Apache 2.0.

Arkitektura Docker

Docker përdor një arkitekturë klient-server. Klienti Docker komunikon me daemonin Docker, i cili merr përsipër barrën e krijimit, funksionimit dhe shpërndarjes së kontejnerëve tuaj. Të dy klienti dhe serveri mund të funksionojnë në të njëjtin sistem, ju mund ta lidhni klientin me një daemon docker në distancë. Klienti dhe serveri komunikojnë nëpërmjet një foleje ose API RESTful.

Kuptimi i Docker

Daemon doker

Siç tregohet në diagram, daemoni funksionon në makinën pritës. Përdoruesi nuk ndërvepron 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 komanda nga përdoruesi dhe ndërvepron me daemon docker.

Brenda dokerit

Për të kuptuar se nga çfarë përbëhet docker, duhet të dini rreth tre komponentëve:

  • imazhe
  • regjistrit
  • kontejnerët

skulpturë

Imazhi i Docker është një shabllon vetëm për lexim. Për shembull, imazhi mund të përmbajë sistemin operativ Ubuntu me Apache dhe një aplikacion në të. Imazhet përdoren për të krijuar kontejnerë. Docker e bën të lehtë krijimin e imazheve të reja, përditësimin e atyre ekzistuese ose mund të shkarkoni imazhe të krijuara nga njerëz të tjerë. Imazhet janë përbërës të një ndërtimi docker.

Regjistri

Regjistri Docker ruan imazhet. Ka regjistra publikë dhe privatë nga të cilët mund të shkarkoni ose ngarkoni imazhe. Një regjistër publik Docker është Qendër dokeri. Ekziston një koleksion i madh i imazheve të ruajtura atje. 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.

Konteйnerы

Kontejnerët janë të ngjashëm me drejtoritë. Kontejnerët përmbajnë gjithçka që i nevojitet aplikacionit për të ekzekutuar. Çdo enë është krijuar nga një imazh. Kontejnerët mund të krijohen, fillojnë, ndalohen, migrohen ose fshihen. Çdo kontejner është i izoluar dhe ofron një platformë të sigurt për aplikimin. Kontejnerët janë pjesë përbërëse e punës.

Pra, si funksionon Docker?

Deri tani e dimë se:

  • ne mund të krijojmë imazhe në të cilat ndodhen aplikacionet tona;
  • ne mund të krijojmë kontejnerë nga imazhet për të ekzekutuar aplikacionet;
  • Ne mund të shpërndajmë imazhe përmes Docker Hub ose një regjistri tjetër imazhesh.

Le të shohim se si këto komponentë përshtaten së bashku.

Si funksionon imazhi?

Ne e dimë tashmë se një imazh është një shabllon vetëm për lexim nga i cili krijohet një kontejner. Çdo imazh përbëhet nga një grup nivelesh. Docker përdor sistemi i skedarëve të bashkimit për të kombinuar këto nivele në një imazh. Sistemi i skedarëve Union lejon që skedarët dhe drejtoritë nga sisteme të ndryshme skedarësh (degë të ndryshme) të mbivendosen në mënyrë transparente, duke krijuar një sistem skedar koherent.

Një nga arsyet pse docker është i lehtë është sepse përdor shtresa si kjo. Kur ndryshoni imazhin, siç është përditësimi i një aplikacioni, krijohet një shtresë e re. Pra, pa zëvendësuar të gjithë imazhin ose rindërtuar atë, siç mund të keni të bëni me një makinë virtuale, vetëm shtresa shtohet ose përditësohet. Dhe nuk keni nevojë të shpërndani të gjithë imazhin e ri, shpërndahet vetëm përditësimi, duke e bërë më të lehtë dhe më të shpejtë shpërndarjen e imazheve.

Në zemër të çdo imazhi është një imazh bazë. Për shembull, ubuntu, imazhi bazë i Ubuntu, ose Fedora, imazhi bazë i shpërndarjes Fedora. Ju gjithashtu mund të përdorni imazhet si bazë për krijimin e imazheve të reja. Për shembull, nëse keni një imazh apache, mund ta përdorni si imazh bazë për aplikacionet tuaja në ueb.

Shënim! Docker zakonisht tërheq imazhe nga regjistri Docker Hub.

Imazhet Docker mund të krijohen nga këto imazhe bazë; ne i quajmë hapat për të krijuar këto imazhe udhëzime. Çdo udhëzim krijon një imazh ose nivel të ri. Udhëzimet do të jenë si më poshtë:

  • komanda e ekzekutimit
  • duke shtuar një skedar ose drejtori
  • krijimi i një ndryshoreje mjedisi
  • udhëzime se çfarë duhet të ekzekutohet kur hapet kontejneri i këtij imazhi

Këto udhëzime ruhen në një skedar Dockerfile. Docker e lexon këtë Dockerfile, kur ndërtoni imazhin, ekzekuton këto udhëzime dhe kthen imazhin përfundimtar.

Si funksionon regjistri i dokerit?

Regjistri është një depo për imazhet e dokerit. Pasi të krijohet imazhi, mund ta publikoni atë në regjistrin publik të Docker Hub ose në regjistrin tuaj personal.

Me klientin docker, mund të kërkoni për imazhe të publikuara tashmë dhe t'i shkarkoni në makinën tuaj docker për të krijuar kontejnerë.

Docker Hub ofron depo imazhesh publike dhe private. Kërkimi dhe shkarkimi i imazheve nga depot publike është i disponueshëm për të gjithë. Përmbajtja e magazinave private nuk përfshihet në rezultatet e kërkimit. Dhe vetëm ju dhe përdoruesit tuaj mund t'i merrni këto imazhe dhe të krijoni kontejnerë prej tyre.

Si funksionon një kontejner?

Një kontejner përbëhet nga një sistem operativ, skedarë përdoruesi dhe meta të dhëna. Siç e dimë, çdo enë është krijuar nga një imazh. Ky imazh i tregon dokerit se çfarë është në kontejner, çfarë procesi duhet të fillojë, kur fillon kontejneri dhe të dhëna të tjera të konfigurimit. Imazhi i Docker është vetëm për lexim. Kur docker nis një kontejner, ai krijon një shtresë leximi/shkrimi në krye të imazhit (duke përdorur sistemin e skedarëve union siç u tha më parë) në të cilën mund të ekzekutohet aplikacioni.

Çfarë ndodh kur kontejneri fillon?

Ose duke përdorur programin docker, ose duke përdorur API-në RESTful, klienti docker i thotë daemon-it docker të nisë kontejnerin.

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

Le të hedhim një vështrim në këtë komandë. Klienti niset duke përdorur komandën docker, me opsion run, i cili thotë se do të hidhet në treg një kontejner i ri. Kërkesat minimale për të drejtuar një kontejner janë atributet e mëposhtme:

  • cili imazh të përdoret për të krijuar kontejnerin. Në rastin tonë ubuntu
  • komanda që dëshironi të ekzekutoni kur niset kontejneri. Në rastin tonë /bin/bash

Çfarë ndodh nën kapuç kur ekzekutojmë këtë komandë?

Docker, me radhë, bën sa më poshtë:

  • shkarkon imazhin e ubuntu: docker kontrollon për disponueshmërinë e imazhit ubuntu në makinën lokale, dhe nëse nuk është atje, atëherë shkarkoni nga Qendër dokeri. Nëse ka një imazh, ai e përdor atë për të krijuar një enë;
  • krijon një enë: kur merret imazhi, docker e përdor atë për të krijuar një kontejner;
  • inicializon sistemin e skedarëve dhe monton nivelin vetëm për lexim: kontejneri krijohet në sistemin e skedarëve dhe imazhi shtohet në nivelin vetëm për lexim;
  • inicializon rrjetin/urën: krijon një ndërfaqe rrjeti që lejon docker-in të komunikojë me makinën pritës;
  • Vendosja e adresës IP: gjen dhe vendos adresën;
  • Fillon procesin e specifikuar: lëshon aplikacionin tuaj;
  • Përpunon dhe prodhon rezultate nga aplikacioni juaj: lidh dhe regjistron hyrjen standarde, daljen dhe rrjedhën e gabimeve të aplikacionit tuaj, në mënyrë që të mund të gjurmoni se si po funksionon aplikacioni juaj.

Tani keni një enë pune. Ju mund të menaxhoni kontejnerin tuaj, të ndërveproni me aplikacionin tuaj. Kur vendosni të ndaloni aplikacionin, fshini kontejnerin.

Teknologjitë e përdorura

Docker është shkruar në Go dhe përdor disa veçori të kernelit Linux për të zbatuar funksionalitetin e mësipërm.

Hapësirat e emrave

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

Kjo krijon një shtresë të izoluar, me çdo aspekt të kontejnerit që funksionon në hapësirën e vet të emrave dhe nuk ka qasje në sistemin e jashtëm.

Lista e disa hapësirave të emrave që përdor docker:

  • pid: për të izoluar procesin;
  • neto: për menaxhimin e ndërfaqeve të rrjetit;
  • ipc: për të menaxhuar burimet e IPC. (ICP: InterProccess Communication);
  • mnt: për të menaxhuar pikat e montimit;
  • utc: për të izoluar kernelin dhe për të kontrolluar gjenerimin e versionit (UTC: Unix timesharing system).

Grupet e kontrollit

Docker përdor gjithashtu teknologjinë cgroups ose grupet e kontrollit. Çelësi për të ekzekutuar një aplikacion në izolim është t'i siguroni aplikacionit vetëm burimet që dëshironi të siguroni. Kjo siguron që kontejnerët të jenë fqinjë të mirë. Grupet e kontrollit ju lejojnë të ndani burimet e disponueshme të harduerit dhe, nëse është e nevojshme, të vendosni kufij dhe kufizime. Për shembull, kufizoni sasinë e mundshme të memories për kontejnerin.

Sistemi i skedarëve të Unionit

Union File Sysem ose UnionFS është një sistem skedari që funksionon duke krijuar shtresa, duke e bërë atë shumë të lehtë dhe të shpejtë. Docker përdor UnionFS për të krijuar blloqet nga të cilat është ndërtuar 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ëta komponentë në një mbështjellës që ne e quajmë formati i kontejnerit. Formati i paracaktuar quhet libcontainer. Docker gjithashtu mbështet formatin tradicional të kontejnerit në Linux duke përdorur LXC. Në të ardhmen, Docker mund të mbështesë formate të tjera të kontejnerëve. Për shembull, integrimi me burgjet BSD ose Solaris Zones.

Burimi: www.habr.com

Shto një koment