Dockeriga tutvumine

Olen juba mitu kuud kasutanud Dockerit veebiprojektide arendamise ja tarnimise protsessi struktureerimiseks. Pakun "Habr Habra" lugejatele tĂ”lget Dockerist kirjutatud sissejuhatavast artiklist — „Dockerit mĂ”istmine“.

Mis on Docker?

Docker on avatud platvorm rakenduste arendamiseks, tarnimiseks ja haldamiseks. Docker on loodud selleks, et kiirendada rakenduste vÀljaandmist. Dockeriga saate oma rakenduse eraldada oma infrastruktuurist ja kÀsitleda infrastruktuuri hallatava rakendusena. Docker aitab teie koodi kiiremini vÀlja anda, kiiremini teste teha ja vÀhendada aega koodi kirjutamise ja kÀivitamise vahel. Docker saavutab selle kerge konteinerite virtualiseerimise platvormiga, kasutades protsesse ja utiliite, mis aitavad hallata ja vÀlja anda teie rakendusi.

Docker vĂ”imaldab oma olemuselt kĂ€ivitada praktiliselt igasuguseid rakendusi, mis on turvaliselt isoleeritud konteineris. Turvaline isoleerimine vĂ”imaldab teil samaaegselt kĂ€ivitada palju konteinerit ĂŒhel hostil. Konteineri kerge loomus, mis kĂ€ivitub ilma tĂ€iendava hĂŒperviisori koormuseta, vĂ”imaldab teil oma riistvarast rohkem vĂ€lja pigistada.

Konteinerite virtualiseerimise platvorm ja vahendid vÔivad olla kasulikud jÀrgmistel juhtudel:

  • Teie rakenduse (ja kasutatavate komponentide) pakkimine Docker konteineritesse;
  • Nende konteinerite jaotamine ja tarnimine teie arendustiimidele arendamiseks ja testimiseks;
  • Nende konteinerite vĂ€ljastamine teie tootmisesse, nii andmekeskustesse kui ka pilve.

Milleks ma saan Dockerit kasutada?

Rakenduste kiire vÀljastamine

Docker sobib suurepÀraselt arendusprotsessi korraldamiseks. Docker vÔimaldab arendajatel kasutada kohalikke konteine rakenduste ja teenustega. See vÔimaldab hiljem integreeruda pideva integratsiooni ja vÀljastamise protsessiga.

NÀiteks kirjutavad teie arendajad koodi kohapeal ja jagavad oma arendussteeki (Docker piltide kogumit) kolleegidega. Kui nad on valmis, saadavad nad koodi ja konteinerid testimisplatsile ning kÀivitavad vajalikud testid. Testimisplatsilt saavad nad saata koodi ja pildid tootmisse.

Lihtsam vÀljastamine ja juurutamine

Konteinerite docker-pÔhine platvorm vÔimaldab hÔlpsalt teie töötakoormust portida. Docker konteinerid saavad töötada teie kohalikul masinal, nii reaalses kui ka virtuaalses serveris andmekeskuses, aga ka pilves.

Portatiivsus ja docker'i kerge kaal vĂ”imaldavad hĂ”lpsalt dĂŒnaamiliselt hallata teie koormust. Saate kasutada dockerit, et kĂ€ivitada vĂ”i lĂ”petada oma rakendusi vĂ”i teenuseid. Docker'i kiirus vĂ”imaldab seda teha peaaegu reaalajas.

Suured koormused ja rohkem töötakoormusi

Docker on kerge ja kiire. See pakub stabiilset, kulutĂ”husat alternatiivi hĂŒperviisoril pĂ”hinevatele virtuaalmasinatele. See on eriti kasulik suurte koormuste korral, nĂ€iteks oma pilve vĂ”i teenusena platvormi (platform-as-service) loomisel. Kuid see on samuti kasulik vĂ€ikeste ja keskmiste rakenduste puhul, kui soovite rohkem olemasolevatest ressurssidest vĂ€lja pigistada.

Docker'i peamised komponendid

Docker koosneb kahest peamisest komponendist:

  • Docker: avatud lĂ€htekoodiga virtualiseerimisel pĂ”hinev platvorm;
  • Docker Hub: meie teenusena platvorm docker konteinerite levitamiseks ja haldamiseks.

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

Docker'i arhitektuur

Docker kasutab kliendi-serveri arhitektuuri. Docker'i klient suhtleb Docker'i deemoniga, mis vĂ”tab enda kanda teie konteinerite loomise, kĂ€itamise ja jaotamise koormuse. MĂ”lemad, klient ja server, vĂ”ivad töötada samal sĂŒsteemil, saate kliendi ĂŒhendada kaugdeemoniga docker. Klient ja server suhtlevad sokli vĂ”i RESTful API kaudu.

Dockeriga tutvumine

Docker deemon

Nagu joonisel nÀidatud, kÀivitatakse deemon hostmasinas. Kasutaja ei suhtle serveriga otse, vaid kasutab selle jaoks klienti.

Docker klient

Docker klient, programm docker — on peamine liides Docker'iga. See saab kĂ€ske kasutajalt ja suhtleb docker deemoniga.

Docker'i sees

Et mÔista, millest docker koosneb, peate teadma kolmest komponendist:

  • pildid (images)
  • registreerimised (registries)
  • konteinerid

Pildid

Docker-pilt on read-only mall. NĂ€iteks vĂ”ib pilt sisaldada operatsioonisĂŒsteemi Ubuntu koos Apache'i ja selle peal töötava rakendusega. Pilte kasutatakse konteinerite loomise jaoks. Docker vĂ”imaldab hĂ”lpsasti luua uusi pilte, uuendada olemasolevaid vĂ”i saate alla laadida teiste loodud pilte. Pildid on docker-i koostisosad.

Registri

Docker-registreerimiskohad hoiavad pilte. On avalikke ja eraldi registreid, kust saab pilte alla laadida vĂ”i ĂŒles laadida. Avalik Docker-registri koht on Docker Hub. Seal hoitakse tohutut kollektsiooni pilte. Nagu teate, vĂ”ivad pilte luua teie vĂ”i saate kasutada teiste loodud pilte. Registrid on jaotamise komponendid.

Konteinerid

Konteinerid on sarnased kataloogidele. Konteinerites on kĂ”ik vajalik rakenduse töötamiseks. Iga konteiner luuakse pildist. Konteinerid vĂ”ivad olla loodud, töösse pandud, peatatud, ĂŒle kantud vĂ”i kustutatud. Iga konteiner on isoleeritud ja see on rakenduse jaoks turvaline platvorm. Konteinerid on töökomponendid.

Kuidas siis Docker töötab?

Praegu teame, et:

  • saame luua pilte, milles asuvad meie rakendused;
  • saame luua konteinerid piltidest rakenduste kĂ€ivitamiseks;
  • saame jagada pilte Docker Hubi vĂ”i mĂ”ne muu pildiregistri kaudu.

Vaadakem, kuidas need koostisosad omavahel seonduvad.

Kuidas töötab pilt?

Me teame juba, et pilt on read-only mall, millest luuakse konteiner. Iga pilt koosneb komplektist tasanditest. Docker kasutab union file system nende tasandite ĂŒhte pildiks ĂŒhendamiseks. Union file system vĂ”imaldab failidel ja kataloogidel erinevatest failisĂŒsteemidest (erinevatest harudest) lĂ€heneda lĂ€bipaistvalt, luues koherentse failisĂŒsteemi.

Üks pĂ”hjusi, miks docker on kergekaaluline, on nende tasandite kasutamine. Kui muudate pilti, nĂ€iteks uuendate rakendust, luuakse uus tasand. Nii, ilma et peaksite asendama kogu pilti vĂ”i selle uuesti koguma, nagu vĂ”ib-olla peate tegema virtuaalmasinaga, lisatakse lihtsalt tasand vĂ”i uuendatakse seda. Ja teil ei ole vaja levitada uut pilti, levitatakse vaid uuendust, mis muudab piltide levitamise lihtsamaks ja kiiremaks.

Iga pilti aluseks on pÔhijoonis. NÀiteks, ubuntu, Ubuntu pÔhijoonis, vÔi fedora, Fedora pÔhijoonis. Samuti vÔite kasutada pilte uute piltide loomiseks. NÀiteks, kui teil on apache pilt, saate seda kasutada oma veebi rakenduste pÔhijoonisena.

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

Docker pildid saavad luua nende pÔhijooniste pÔhjal, nende piltide loomiseks vajalikud sammud nimetame juhisteks. Iga juhis loob uue pildi vÔi taseme. Juhisteks on jÀrgmised toimingud:

  • kĂ€skluse kĂ€ivitamine
  • faili vĂ”i katalooge lisamine
  • keskkonnamuutuja loomine
  • mĂ€rkus, mida kĂ€ivitada, kui see pilt kĂ€ivitatakse

Need juhised salvestatakse faili Dockerfile. Docker loeb seda Dockerfile, kui kogute pilti, tÀidab need juhised ja tagastab lÔpp-pildi.

Kuidas toimib docker register?

Register on docker piltide laoruum. Pildi loomise jÀrel saate selle avalikku Docker Hub registrisse vÔi oma isiklikku registrisse avaldada.

Docker kliendi abil saate otsida juba avaldatud pilte ja alla laadida neid oma seadmesse dockeriga konteinerite loomiseks.

Docker Hub pakub avalikke ja privaatseid piltide laosid. Avalike ladude sisu leidmine ja allalaadimine on kÔigile kergesti kÀttesaadav. Privaatses laos sisu ei tohi otsingutulemustesse sattuda. Ainult teie ja teie kasutajad vÔivad neid pilte saada ja neist konteinerite loomine.

Kuidas toimib konteiner?

Konteiner koosneb operatsioonisĂŒsteemist, kasutaja failidest ja metaandmetest. Kuidas me teame, et iga konteiner luuakse pildist. See pilt ĂŒtleb dockerile, mis asub konteineris, millist protsessi kĂ€ivitada, kui konteiner kĂ€ivitatakse ja muid konfiguratsioonilisi andmeid. Docker pilt on ainult lugemiseks. Kui docker kĂ€ivitab konteineri, loob ta taseme lugemis/kirjutamiseks pildi kohal (kasutades eelnevalt mainitud ĂŒhisfaili sĂŒsteemi), kus rakendust saab kĂ€ivitada.

Mis juhtub, kui konteiner kÀivitatakse?

Kas programmi kaudu docker, vĂ”i RESTful API kaudu, docker klient ĂŒtleb docker deemonile konteineri kĂ€ivitada.

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

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

  • millist pilti kasutada konteineri loomisel. Meie puhul ubuntu
  • kĂ€sk, mida soovite kĂ€ivitada, kui konteiner kĂ€ivitatakse. Meie puhul /bin/bash

Mis siis toimub kapoti all, kui me selle kÀsu kÀivitame?

Docker teeb jÀrjestikku jÀrgmist:

  • laeb alla pilti ubuntu: docker kontrollib, kas pilt on olemas ubuntu kohalikul masinal, ja kui ei, siis laadib selle alla Docker Hub. Kui pilt on olemas, siis kasutab seda konteineri loomiseks;
  • loob konteineri: kui pilt on saadud, kasutab docker seda konteineri loomiseks;
  • initsialiseerib failisĂŒsteemi ja monteerib ainult lugemiseks tasandi: konteiner on loodud failisĂŒsteemis ja ainult lugemiseks tasand on lisatud pildile;
  • initsialiseerib vĂ”rgu/silda: loomine vĂ”i ladustamine, mis vĂ”imaldab dockeril suhelda hostmasinaga;
  • IP-aadressi mÀÀramine: otsib ja mÀÀrab aadressi;
  • KĂ€ivitab mÀÀratud protsessi: kĂ€ivitab teie rakenduse;
  • KĂ€idab ja vĂ€ljastab teie rakenduse vĂ€ljundi: ĂŒhendab ja logib teie rakenduse standardse sisend, vĂ€ljundi ja vigade voogud, et saaksite jĂ€lgida, kuidas teie rakendus töötab.

NĂŒĂŒd on teil toimiv konteiner. Saate hallata oma konteinerit ja suhelda oma rakendusega. Kui otsustate rakenduse peatada, kustutage konteiner.

Kasutatud tehnoloogiad

Docker on kirjutatud Go-s ja kasutab Linuxi kernel teatud funktsionaalsuse rakendamiseks.

Nimekonnad (namespaces)

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

See loob isoleeritud tasandi, kus iga konteineri aspekt on kĂ€ivitatud oma nimes, ja ei pÀÀse vĂ€lissĂŒsteemi juurde.

MÔned docker'i kasutatavad nimesid:

  • pid: protsessi isoleerimiseks;
  • net: vĂ”rgu liideste haldamiseks;
  • ipc: IPC ressursside haldamiseks. (ICP: InterProccess Communication);
  • mnt: mount-punktide haldamiseks;
  • utc: tuuma isoleerimiseks ja versiooni genereerimise kontrollimiseks (UTC: Unix timesharing system).

Kontrollgrupid (control groups)

Docker kasutab samuti tehnoloogiat cgroups vÔi kontrollgrupid. Rakenduse tÔhususe vÔti on isoleerimine, pakkudes rakendusele ainult neid ressursse, mida soovite anda. See tagab, et konteinerid on head naabrid. Kontrollgrupid vÔimaldavad jaotada saadavalolevaid riistvara ressursse ja vajadusel seada piiranguid ja piire. NÀiteks piirata konteineri vÔimalikku mÀlu hulka.

Union File System

Union File Sysem ehk UnionFS on failisĂŒsteem, mis töötab tasemeid luues, muutes selle vĂ€ga kergeks ja kiireks. Docker kasutab UnionFS-i konteinerite loomiseks vajalike plokkide koostamiseks. Docker vĂ”ib kasutada mitmeid UnionFS-i variante, sealhulgas: AUFS, btrfs, vfs ja DeviceMapper.

Konteineriformaadid

Docker koosneb neist komponentidest ĂŒmbrikus, mida me nimetame konteineriformaadiks. Vaikimisi kasutatakse formaati, mida nimetatakse libcontainer. Samuti toetab Docker Linuxis traditsioonilist konteineri formaati LXC. Tulevikus vĂ”ib Docker toetada ka teisi konteineriformaate, nĂ€iteks integreerides BSD Jailse vĂ”i Solaris Zone'e.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster