Olen kasutanud Dockerit veebiprojektide arendus- ja tarnimisprotsessi struktureerimiseks juba mitu kuud. Jagan 'Habr Habra' lugejatega tĂ”lget Dockeriga tutvumisartiklist â .
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.

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 . 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 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
ubuntukohalikul masinal olemas; kui ei, siis laadib selle alla . 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 . Tulevikus vĂ”ib Docker toetada ka teisi konteineriformaate. NĂ€iteks integreerudes BSD Jailide vĂ”i Solaris Zones'iga.
Allikas: habr.com
