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
