Kuidas mĂ”ista, kas vajate Dockerit vĂ”i VM-i? Tuleb mÀÀratleda, mida tĂ€pselt soovite isoleerida. Kui on vajalik isoleerida sĂŒsteem koos garanteeritud reserveeritud ressurssidega ja virtuaalse riistvaraga, on valikuks VM. Kui seevastu on vaja isoleerida töötavad rakendused kui eraldiseisvad sĂŒsteemi protsessid, vajate Dockerit.
Mis siis tegelikult eristab Docker-konteinereid VM-idest?
Virtuaalne masin (VM) on virtuaalne arvuti kĂ”igi virtuaalsete seadmete ja virtuaalse kĂ”vakettaga, kuhu installitakse uus sĂ”ltumatu opsĂŒsteem koos virtuaalsete seadme draiveritega, mĂ€luhalduse ja muude koostisosadega. See tĂ€hendab, et saame fĂŒĂŒsilise riistvara abstraktsiooni, mis vĂ”imaldab ĂŒhel arvutil kĂ€itada mitmeid virtuaalseid arvuteid.
Installitud VM vÔib hÔivata erinevalt ruumi arvuti kÔvakettal:
- fikseeritud ruumi kÔvakettal, mis vÔimaldab kiiremat ligipÀÀsu virtuaalsele kÔvakettale ja aitab vÀltida faili fragmenteerimist;
- dĂŒnaamiline mĂ€lu eraldamine. TĂ€iendavate rakenduste installimisel eraldatakse mĂ€lumahtu dĂŒnaamiliselt neile, kuni saavutatakse maksimaalne maht, mis on ette nĂ€htud.
Mida rohkem virtuaalmasinate serverisse paigutatakse, seda rohkem ruumi nad vÔtavad ning nÔuavad pidevat keskkonna toetust, mis on vajalik teie rakenduse toimimiseks.
Docker on konteinerite pĂ”hjal rakenduste loomise tarkvara. Konteinerid ja virtuaalmasinaid omavad sarnaseid eeliseid, kuid töötavad erinevalt. Konteinerid vĂ”tavad vĂ€hem ruumi, kuna taaskasutavad suuremat hulka ĂŒhiseid host-sĂŒsteemi ressursse kui VM-id, kuna erinevalt VM-idest tagab see virtualiseerimise opsĂŒsteemi tasemel, mitte riistvara tasemel. See lĂ€henemine tagab vĂ€iksema mĂ€lumahtu, kiirema juurutamise ja lihtsama skaleerimise.
Konteiner pakub tĂ”husamat rakenduste kapseldamise mehhanismi, pakkudes vajalikke liideseid host-sĂŒsteemile. See vĂ”imalus vĂ”imaldab konteineritel jagada sĂŒsteemi tuuma, kus iga konteiner töötab nagu eraldi protsess pĂ”hiosas, millel on oma mĂ€lu piirkondade kogum (oma virtuaalne aadressiruum). Kuna iga konteineri virtuaalne aadressiruum on ainulaadne, ei saa andmed, mis kuuluvad erinevatesse mĂ€lu piirkondadesse, ĂŒksteist muuta.
Docker'i natiivne operatsioonisĂŒsteem on Linux (Dockerit saab kasutada ka Windowsis ja MacOS-is), mis kasutab selle pĂ”hieeliseid, mis vĂ”imaldavad tal korraldada tuumade jagamist. Docker'i konteinerite kĂ€ivitamine Windowsis toimub Linuxi operatsioonisĂŒsteemiga virtuaalmasinas, kuna konteinerid jagavad host-sĂŒsteemi OS-i ja nende peamine OS on Linux.
Konteiner â kuidas see toimib?
Konteiner on rakenduse tasemel abstraktsioon, mis ĂŒhendab koodi ja sĂ”ltuvused. Konteinerid luuakse alati piltidest, lisades kirjutatav ĂŒlemine kiht ja initsialiseerides erinevaid parameetreid. Kuna konteineril on oma kirjutuskiht ja kĂ”ik muudatused salvestatakse sellesse kihti, saavad mitmed konteinerid ĂŒhiselt kasutada ĂŒhte ja sama pĂ”hikujutist.
Iga konteinerit saab konfigureerida projektis docker-compose asuva faili kaudu, mis on seotud pĂ”hilahendusega â docker-compose.yml. Seal saab mÀÀrata erinevaid parameetreid, nagu konteineri nimi, sadamad, identifikaatorid, ressursside piirangud, sĂ”ltuvused teistest konteineritest. Kui konteineri nime seadistustes ei mÀÀrata, loob Docker igal korral uue konteineri, andes sellele nime juhuslikult.
Kui konteiner kĂ€ivitatakse pildist, monteerib Docker failisĂŒsteemi lugemiseks ja kirjutamiseks allpool asuvate kihtide peale. Just siin kĂ€ivitatakse kĂ”ik protsessid, mida soovime, et meie Docker konteiner tĂ€idaks.
Kui Docker kĂ€ivitab konteineri esmakordselt, on algne lugemis-kirjutuskiht tĂŒhi. Kui muudatusi tehakse, rakendatakse need sellele kihile; nĂ€iteks, kui soovite faili muuta, kopeeritakse see all olevast ainult lugemiseks mĂ”eldud kihist lugemis-kirjutuskihti.
A failiversioon, mis on saadaval ainult lugemiseks, jÀÀb endiselt alles, kuid nĂŒĂŒd on see peidetud koopia alla. Andmete salvestamiseks, sĂ”ltumata konteineri elutsĂŒklist, kasutatakse mahtusid. Mahud initsialiseeritakse konteineri loomisel.
Kuidas on pilt seotud konteineriga?
TĂŒĂŒp â iga konteineri peamine element. Pilt luuakse projektile lisatud Dockerfile'ist ja see esindab failisĂŒsteemide (kihtide) kogumit, mis on omavahel kuhjatud ja koos gruppeeritud, ning need on ainult loetavad; maksimaalne kihtide arv on 127.
Iga pildi aluseks on baasimage, mille mÀÀrab kĂ€sk FROM â sisendpunkt pildi koostamisel Dockerfile'is. Iga kiht on ainult lugemiseks mĂ”eldud ja esindab ĂŒhte kĂ€sku, mis muudab failisĂŒsteemi, nagu on kirjas Dockerfile'is.
Korras piltide ĂŒhendamiseks kasutab Docker Advanced multi layered Union failisĂŒsteemi (AuFS, mis on ehitatud UnionFS-i pĂ”hjal), mis vĂ”imaldab erinevatel failidel ja kaustadel erinevatest failikihtidest lĂ€bipaistvalt kattuda, luues ĂŒhendatud failisĂŒsteemi.
Kihtidel on metainformatsioon, mis vĂ”imaldab salvestada iga kihi kohta seotud teavet töö ajal ja kokkupanekul. Iga kiht sisaldab viidet jĂ€rgmisele kihile, kui kihil ei ole viidet, siis on see pildi ĂŒlemine kiht.
Dockerfile vÔib sisaldada selliseid kÀske nagu:
- FROM â sisendpunkt pildi koostamisel;
- MAINTAINER â pildi omaniku nimi;
- RUN â kĂ€su tĂ€itmine pildi koostamise kĂ€igus;
- ADD â hostifaili kopeerimine uude pilti, kui mÀÀrata failide URL, laadib Docker selle mÀÀratud katalooge;
- ENV â keskkonnamuutujad;
- CMD â kĂ€ivitab uue konteineri loomise pildi alusel;
- ENTRYPOINT â kĂ€sk tĂ€idetakse konteineri kĂ€ivitamisel.
- WORKDIR â töökaust kĂ€su CMD tĂ€itmiseks.
- USER â mÀÀrab UID loodavale konteinerile, mis pĂ”hineb pildil.
- VOLUME â mountib hosti kausta konteinerisse.
- EXPOSE â komplekt pordidest, mida konteiner kuulab.
Kuidas UnionFS töötab?
UnionFS â teeninduslik stekkfailisĂŒsteem (FS) Linuxi ja FreeBSD jaoks. Antud FS rakendab kirjutamise koopia mehhanismi (Copy-On-Write, COW). UnionFS-i tĂ¶Ă¶ĂŒksus on kiht, iga kiht tuleb vaadata kui eraldi tĂ€ielikku failisĂŒsteemi, millel on kataloogide hierarhia alates juurest. UnionFS loob ĂŒhendatud mount'i teistele failisĂŒsteemidele ja vĂ”imaldab kasutajale lĂ€bipaistvalt liita erinevate failisĂŒsteemide faile ja katalooge (mida nimetatakse harudeks) ĂŒhte seotud failisĂŒsteemi.
Sama teede sisu kataloogid kuvatakse koos ĂŒhises ĂŒhendatud kataloogis (ĂŒhes nimede ruumis) saadud failisĂŒsteemis.
UnionFS liidab kihid, jÀrgides jÀrgmisi pÔhimÔtteid:
- ĂŒks kiht muutub ĂŒlemiseks kihiks, teine ja jĂ€rgnevad on alumised kihid;
- kasutajale on kihtide objektid kergesti kĂ€ttesaadavad 'ĂŒlemalt alla', see tĂ€hendab, et kui nĂ”utud objekt on 'ĂŒlemises' kihis, siis see tagastatakse, olenemata objekti olemasolust 'alumises' kihis; vastasel juhul tagastatakse 'alumise' kihi objekt; kui nĂ”utud objekti ei ole seal ega seal, tagastatakse viga 'Sellist faili vĂ”i katalooge ei ole';
- töökihiks on 'ĂŒlemine', st kĂ”ik kasutaja tegevused andmete muutmisel kajastuvad ainult ĂŒlemise kihi peal, mĂ”jutamata alumiste tasemete sisu.
Docker on kÔige levinum konteineritehnoloogia rakenduste töötamisel. See on saanud standardiks selles valdkonnas, pÔhinedes cgroups'il ja nimede ruumidel, mida tagab Linuxi kernel.
Docker vĂ”imaldab meil kiiresti rakendusi kasutusele vĂ”tta ja maksimaalselt optimeerida failisĂŒsteemi, jagades OS-i kerneli kĂ”ikide konteinerite vahel, töötades nagu eraldi OS-protsessid.
Allikas: habr.com
