MÔistes Dockerit

Olen kasutanud Dockerit veebiprojektide arendus- ja tarnimisprotsessi struktureerimiseks juba mitu kuud. Jagan 'Habr Habra' lugejatega tĂ”lget Dockeriga tutvumisartiklist — „Understanding Docker“.

Mis on Docker?

Docker on avatud platvorm rakenduste arendamiseks, tarnimiseks ja haldamiseks. Docker on loodud selleks, et kiirendada teie rakenduste kÀivitamist. Dockeriga saate isoleerida oma rakenduse oma infrastruktuurist ja hallata infrastruktuuri kui hallatavat rakendust. Docker aitab teie koodi kiiremini tarnida, kiiremini testida, rakendusi kiiremini vÀlja anda ja vÀhendada aega koodikirjutamise ja koodi kÀivitamise vahel. Docker teeb seda kerge konteinerite virtualiseerimise platvormiga, kasutades protsesse ja utiliite, mis aitavad hallata ja tarnida teie rakendusi.

Docker vĂ”imaldab oma tuumas praktiliselt igasuguste rakenduste kĂ€ivitamist, turvaliselt eraldatuna konteineris. Turvaline eraldatus vĂ”imaldab teil samal hostil samal ajal kĂ€itada mitmeid konteinerid. Kerguse tĂ”ttu, millega konteinerid kĂ€ivitatakse ilma hĂŒpervisorilt tĂ€iendava koormuseta, saate oma riistvarast rohkem kasu.

Konteinerite virtualiseerimise platvorm ja tööriistad vÔivad olla kasulikud jÀrgmistel juhtudel:

  • teie rakenduste (ja kasutatavate komponentide) pakkimine docker konteineritesse;
  • nende konteinerite jagamine ja tarnimine teie arendus- ja testimismeeskondadele;
  • nende konteinerite paigutamine tootmisĂŒsteemidesse, nii andmekeskustesse kui ka pilveteenustes.

Milleks ma saan dockerit kasutada?

Teie rakenduste kiire paigutamine

Docker sobib suurepĂ€raselt arendustsĂŒkli korraldamiseks. Docker vĂ”imaldab arendajatel kasutada kohalikke konteinerid rakenduste ja teenuste jaoks, mis vĂ”imaldab hiljem integreeruda pideva integreerimise ja juurutamise (continuous integration and deployment workflow) protsessiga.

NÀiteks kirjutavad teie arendajad koodi kohapeal ja jagavad oma arenduspaketti (docker piltide komplekti) kolleegidega. Kui nad on valmis, saadavad nad koodi ja konteinerid testimisalale ja kÀivitavad kÔik vajalikud testid. Testimisalalt saavad nad saata koodi ja pildid tootmisse.

Lihtsam juurutamine ja kasutuselevÔtt

KonteineripÔhine docker platvorm vÔimaldab hÔlpsasti teie koormust portida. Docker konteinerid saavad töötada teie kohapealses arvutis, olgu see siis reaalses vÔi virtuaalses masinas andmekeskuses, vÔi ka pilves.

Docker'i portatiivsus ja kerge kaal vĂ”imaldavad hĂ”lpsasti teie koormust dĂŒnaamiliselt hallata. VĂ”ite kasutada docker'it oma rakenduse vĂ”i teenuste juurutamiseks vĂ”i sulgemiseks. Docker'i kiirus vĂ”imaldab seda teha peaaegu reaalajas.

Suured koormused ja rohkem koormusi

Docker on kerge ja kiire. See pakub usaldusvÀÀrset ning kulutĂ”husat alternatiivi hĂŒpervisorite pĂ”histele virtuaalmasinatele. See on eriti kasulik suure töökoormuse korral, nĂ€iteks oma pilve vĂ”i teenusena platvormi (platform-as-a-service) loomisel. Kuid see on samuti kasulik vĂ€ikeste ja keskmise suurusega rakenduste jaoks, kui soovite oma olemasolevatest ressurssidest rohkem vĂ€lja pigistada.

Docker peamised komponendid

Docker koosneb kahest peamisest komponendist:

  • Docker: avatud lĂ€htekoodiga virtualiseerimisplatvorm;
  • Docker Hub: meie teenusena platvorm docker konteinerite jagamiseks ja haldamiseks.

MĂ€rkus! Docker levitatakse Apache 2.0 litsentsi alusel.

Docker arhitektuur

Docker kasutab kliendi-serveri arhitektuuri. Docker'i klient suhtleb Docker'i deemoniga, mis tegeleb teie konteinerite loomise, kĂ€itamise ja jagamise koormaga. Nii klient kui ka server vĂ”ivad töötada samal sĂŒsteemil; saate liita kliendi kaugdeemoniga. Klient ja server suhtlevad lĂ€bi sokkide vĂ”i RESTful API kaudu.

MÔistes Dockerit

Docker deemon

Diagrammil on nÀidatud, et deemon kÀivitatakse hostmasinas. Kasutaja ei suhtle serveriga otse, vaid kasutab selleks klienti.

Docker-klient

Docker-klient, programm docker on peamine liides Dockeriga. See saab kÀske kasutajalt ja suhtleb docker-deemoniga.

Dockeris sees

Selleks, et mÔista, millest docker koosneb, peate teadma kolme komponenti:

  • pildid (images)
  • registrid (registries)
  • konteinerites

Pildid

Docker-pilt on lugemiseks mĂ”eldud mall. NĂ€iteks vĂ”ib pilt sisaldada Ubuntu operatsioonisĂŒsteemi koos Apache ja rakendusega. Pilte kasutatakse konteinerite loomiseks. Docker vĂ”imaldab hĂ”lpsasti luua uusi pilte, uuendada olemasolevaid vĂ”i saate alla laadida teiste loodud pilte. Pildid on Docker-i koostisosad.

Register

Docker-register salvestab pilte. On avalikke ja privaatseid registreid, kust saab pilte alla laadida vĂ”i laadida ĂŒles. Avalik Docker-register on Docker Hub. Seal hoitakse tohutut kogumit pilte. Nagu teate, vĂ”ivad pildid olla teie loodud vĂ”i saate kasutada teiste loodud pilte. Registrid on levitamise komponendid.

Konteinerid

Konteinerid sarnanevad direktoritele. Konteinerites sisaldub kÔik, mis on vajalik rakenduse töötamiseks. Iga konteiner luuakse pildist. Konteinerid vÔivad olla loodud, kÀivitatud, peatatud, liigutatud vÔi kustutatud. Iga konteiner on isoleeritud ja turvaline platvorm rakenduse jaoks. Konteinerid on töökomponendid.

Kuidas Docker töötab?

Praegu teame, et:

  • vĂ”ime luua pilte, mis sisaldavad meie rakendusi;
  • vĂ”ime luua konteinereid piltidest rakenduste kĂ€ivitamiseks;
  • vĂ”ime pilte levitada lĂ€bi Docker Hubi vĂ”i mĂ”ne muu piltide registri.

Vaadakem, kuidas need komponendid omavahel mÀngivad.

Kuidas toimib pilt?

Teame juba, et pilt on read-only mall, millest luuakse konteiner. Iga pilt koosneb tasemetest. Docker kasutab union file system nende tasemete kokku kombineerimiseks ĂŒheks pildiks. Union file system vĂ”imaldab failidele ja direktoritele erinevatest failisĂŒsteemidest (erinevatest harudest) lĂ€bipaistvalt kattuda, luues koherentse failisĂŒsteemi.

Üks pĂ”hjus, miks docker on kergesti kasutatav, on tasandite kasutamine. Kui muudad kuvi, nĂ€iteks uuendades rakendust, luuakse uus tasand. Nii et erinevalt virtuaalsest masinast, kus vĂ”ib-olla pead kogu kuvi asendama vĂ”i uuesti koostama, lisatakse vĂ”i uuendatakse ainult tasand. Ja sul ei ole vaja jagada kogu uut kuvi, vaid ainult uuendust, mis teeb kujundite levitamise lihtsamaks ja kiiremaks.

Iga kuvi aluseks on baas kuvi. NÀiteks ubuntu, Ubuntu baas kuvi, vÔi fedora, Fedora jaotuse baas kuvi. Samuti saad kasutada kuve uute kujundite loomiseks. Kui sul on apache kuvi, saad kasutada seda oma veebirakenduste baas kujuna.

MÀrkus! Docker vÔtab kuve tavaliselt Docker Hub registrist.

Docker kuve vÔivad luua nende baas kuvidest, nende kuvide loomiseks mÔeldud samme nimetatakse juhisteks. Iga juhis loob uue kuvi vÔi tasandi. Juhised vÔib jagada jÀrgmisteks tegevusteks:

  • kĂ€skude kĂ€ivitamine
  • faili vĂ”i kausta lisamine
  • keskkonnamuutuja loomine
  • juhised, mida kĂ€ivitada, kui selle pildi konteiner kĂ€ivitatakse

Need juhised on salvestatud failis Dockerfile. Docker loeb selle Dockerfile, kui koostate pilti, tÀidab need juhised ja tagastab lÔplikku pilti.

Kuidas töötab dockeri register?

Register on dockeri piltide ladustamine. Pildi loomise jÀrel saate selle avalikule docker hubile vÔi isiklikku registrisse avaldada.

Docker kliendi abil saate otsida juba avaldatud pilte ja alla laadida need oma masinale dockerisse konteinerite loomiseks.

Docker Hub pakub avalikke ja privaate pildiladusid. Avalike ladude sisu on kÔigile kogu aeg saadaval. Privaatses laos olev sisu ei kajastu otsingutulemustes. Ainult teie ja teie kasutajad saavad neid pilte ja luua neist konteinerid.

Kuidas töötab konteiner?

Konteiner koosneb operatsioonisĂŒsteemist, kasutaja failidest ja metaandmetest. Nagu me teame, luuakse iga konteiner pildist. See pilt ĂŒtleb docker’ile, mis konteineris on, millist protsessi kĂ€ivitada, kui konteiner kĂ€ivitatakse, ja muid konfiguratsiooniteavet. Docker pilt on ainult lugemiseks. Kui docker kĂ€ivitab konteineri, loob ta pildi peal lugemis-/kirjutamise taseme (kasutades eelnevalt mainitud ĂŒhinematefaili sĂŒsteemi), kus rakendust saab kĂ€itada.

Mis juhtub, kui konteiner kÀivitatakse?

VĂ”i programmi kaudu docker, vĂ”i RESTful API kaudu, docker klient kĂŒsib docker deemonilt konteineri kĂ€ivitamist.

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

Vaatame seda kĂ€sku. Klient kĂ€ivitatakse kĂ€suga docker, koos valikuga run, mis ĂŒtleb, et kĂ€ivitatakse uus konteiner. Konteineri kĂ€ivitamiseks on minimaalseteks nĂ”ueteks jĂ€rgmised atribuudid:

  • millist pilti kasutada konteineri loomiseks. Meie puhul ubuntu
  • kĂ€sku, mida soovite kĂ€ivitada, kui konteiner on kĂ€ivitatud. Meie puhul /bin/bash

Mis siis ikkagi juhtub, kui me selle kÀsu kÀivitame?

Docker jÀrgib jÀrgmisi samme:

  • laeb alla pildi ubuntu: docker kontrollib, kas pilt on ubuntu kohalikul masinal olemas; kui ei, siis laadib selle alla Docker Hub. Kui pilt on olemas, kasutatakse seda konteineri loomisel;
  • loomine konteiner: kui pilt on saanud, kasutab docker seda konteineri loomiseks;
  • algatab failisĂŒsteemi ja liidab ainult lugemise taseme: konteiner on loodud failisĂŒsteemis ja ainult lugemise tase lisatud pildile;
  • algatab vĂ”rgu/silda: loob vĂ”rguliidese, mis vĂ”imaldab dockeril suhelda hostmasinaga;
  • IP-aadressi seadmine: leidmine ja seadmine aadress;
  • KĂ€ivitab mÀÀratud protsessi: kĂ€ivitab teie rakenduse;
  • KĂ€itleb ja edastab teie rakenduse vĂ€ljundi: ĂŒhendab ja logib teie rakenduse standardse sisendi, vĂ€ljundi ja veateate, et saaksite jĂ€lgida, kuidas teie rakendus töötab.

NĂŒĂŒd on teil töötav konteiner. Saate hallata oma konteinerit ja suhelda oma rakendusega. Kui olete valmis rakenduse peatama, kustutage konteiner.

Kasutatud tehnoloogiad

Docker on kirjutatud Go-s ja kasutab mĂ”ningaid Linuxi kernel'i vĂ”imalusi ĂŒlaltoodud funktsionaalsuse elluviimiseks.

Nimed (namespaces)

Docker kasutab tehnoloogiat namespaces isoleeritud tööruumide korraldamiseks, mida me nimetame konteineriteks. Kui kÀivitame konteineri, loob Docker selle konteineri jaoks komplekti nimesid.

See loob isoleeritud tasandi, kus iga konteineri aspekt töötab oma nimes, ega pÀÀse vĂ€lissĂŒsteemide juurde.

MÔningate Docker'i kasutatavate nimede loetelu:

  • pid: protsesside isoleerimiseks;
  • net: vĂ”rguliideste haldamiseks;
  • ipc: IPC ressursside haldamiseks. (ICP: InterProccess Communication);
  • mnt: moodulite punktide haldamiseks;
  • utc: kernel'i isoleerimiseks ja versioonide genereerimise kontrollimiseks (UTC: Unix timesharing system).

Kontrollgrupid (Control groups)

Docker kasutab samuti tehnoloogiat cgroups vÔi kontrollgrupid. Rakenduse isoleeritud töö pÔhjus on pakkuda rakendusele ainult neid ressursse, mida soovite sellele anda. See tagab, et konteinerid oleksid head naabrid. Kontrollgrupid vÔimaldavad jagada saadaolevaid riistvararesursse ja vajadusel seada piire ja piiranguid. NÀiteks saate piirata konteineri vÔimalikku mÀlu kogust.

Union File System

Union File Sysem vĂ”i UnionFS on failisĂŒsteem, mis töötab tasandite loomise kaudu, muutes selle vĂ€ga kergekaaluliseks ja kiireks. Docker kasutab UnionFS-i konteinerite ehitamiseks, luues blokke. Docker vĂ”ib kasutada mitmeid UnionFS-i variante, sealhulgas: AUFS, btrfs, vfs ja DeviceMapper.

Konteineriformaadid

Docker ĂŒhendab need komponendid ĂŒmbrikku, mida me nimetame konteineriformaadiks. Vaikimisi kasutatav formaat on libcontainer. Samuti toetab Docker traditsioonilist konteineriformaati Linuxis koos LXC. Tulevikus vĂ”ib Docker toetada ka teisi konteineriformaate. NĂ€iteks integreerudes BSD Jailide vĂ”i Solaris Zones'iga.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster