Olen juba mitu kuud kasutanud Dockerit veebiprojektide arendamise ja tarnimise protsessi struktureerimiseks. Pakun "Habr Habra" lugejatele tĂ”lget Dockerist kirjutatud sissejuhatavast artiklist â .
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.

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 . 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 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
ubuntukohalikul masinal, ja kui ei, siis laadib selle alla . 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 . Tulevikus vĂ”ib Docker toetada ka teisi konteineriformaate, nĂ€iteks integreerides BSD Jailse vĂ”i Solaris Zone'e.
Allikas: habr.com
