Versija 3 nuo 2020-12-08 09:45:33

Išvalyti žinutę
Locked History Actions

Docker Networking

Įvadas

„Konteinerių talpinimas“ (angl. „Containerization“) tapo pagrindinė programinės įrangos kūrimo tendencija kaip alternatyva virtualizacijai(angl. „Virtualization“) . Tai apima programinės įrangos kodo ir visų jo priklausomybių konteineriavimą, kad jis galėtų veikti vienodai ir nuosekliai bet kurioje sistemoje.

Konteinerių(angl. „Container“) naudojimas leidžia programuotojams greičiau kurti ir diegti programas. Taikant tradicinius metodus, kodas yra kuriamas konkrečioje aplinkoje, kuri perkėlus į naują vietą dažnai atsiranda klaidų. Pavyzdžiui, kai programuotojas perkelia kodą iš kompiuterio į virtualią mašiną (angl. „virtual machine“) arba iš „Linux“ į „Windows“ operacinę sistemą. Konteinerių talpinimas pašalina šią problemą, sujungdamas programos kodą su susijusiais konfigūracijos failais, bibliotekomis ir priklausomybėmis, reikalingomis jam paleisti. Šis programinės įrangos paketas arba „konteineris“ yra nepriklausomas nuo pagrindinės operacinės sistemos, todėl gali veikti su bet kokią platformą ar debesimi.

Konteinerių ir procesų izoliavimo koncepcija yra dešimtmečių senumo, tačiau 2013 m. atvirojo kodo „Docker Engine“ pasirodymas - pramoninių konteinerių standartas su paprastais programiniais įrankiais ir universaliu pakavimo metodu - paspartino šios technologijos pritaikymą. Tyrimų firma „Gartner“ prognozuoja, kad daugiau nei 50% įmonių iki 2022 m. naudos konteinerių technologijas. 2017 m. pabaigos IBM atliktos apklausos rezultatai rodo, kad adaptacija vyksta dar greičiau, atskleidžiant, kad 59% naudotojų pagerino programų kokybę ir sumažino defektus rezultate.

„Virtual machine“ koncepcija

Virtuali mašina (VM) yra kompiuterinės sistemos emuliacija. Paprasčiau tariant, tai leidžia paleisti, atrodo, daug atskirų kompiuterių aparatinėje įrangoje, kai iš tikrųjų yra vienas kompiuteris.Operacinės sistemos (OS) ir jų programos dalijasi aparatinės įrangos ištekliais iš vieno pagrindinio serverio arba iš pagrindinio serverio grupės. Kiekvienai VM reikia savo pagrindinės OS, o aparatinė įranga yra virtualizuota. „Hypervisor“ sudaro programinė įranga, programinė-aparatinė arba aparatinė įranga, kuri reikalinga VM veikimui. „Hypervisor“ yra tarp aparatūros ir virtualios mašinos ir yra būtinas serveriui virtualizuoti.Nuo to laiko, kai atsirado prieinamos virtualizacijos technologijos ir debesų kompiuterijos paslaugos, dideli ir maži IT skyriai VM naudojo kaip būdą sumažinti išlaidas ir padidinti efektyvumą.1 pav. „Virtual machine“ koncepcijaTačiau VM gali užimti daug sistemos išteklių. Kiekviena virtualioji mašina paleidžia ne tik visą operacinės sistemos kopiją, bet ir visos aparatinės įrangos, kurią reikia paleisti operacinei sistemai, virtualią kopiją. Tai greitai prideda daug RAM ir CPU ciklų. Tai vis dar ekonomiška, palyginti su atskirų kompiuterių naudojimu, tačiau kai kurioms programoms tai gali būti per daug, todėl buvo sukurti konteineriai.

Naudojant konteinerius, užuot virtualizavus pagrindinį kompiuterį kaip VM, virtualizuojama tik OS.Konteineriai yra „virš“ kompiuterio aparatinės ir OS dalies. Kiekvienas konteineris dalijasi pagrindinio kompiuterio „host OS“ branduoliu(angl. „Kernel)“ bei bibliotekomis. Dalijantis OS ištekliais, sumažėja poreikis atkurti operacinės sistemas, o tai reiškia, kad serveris gali vykdyti keletą darbo krūvių su vienu operacinės sistemos diegimu. Taigi konteineriai yra išskirtinai lengvi – užima megabaitais ir užtrunka vos kelias sekundes paleisti. Palyginus su konteineriais, VM paleidimo laikas yra kelios minutės ir ir lyginant dydžiais, užima daug daugiau.Priešingai nei VM, viskas, ko reikia konteineriui, tai operacinės sistemos, palaikančioms programas, bibliotekas bei sistemos išteklius, kad būtų galima paleisti konkrečią programą. Praktiškai tai reiškia, kad galite naudoti du tris kartus daugiau programų viename serveryje su konteineriais, nei galite su VM. Be to, naudodami konteinerius galite sukurti nešiojamą, nuoseklią darbo aplinką, skirtą kūrimui, testavimui ir diegimui.2 pav. „Container“ koncepcija

„Docker“ yra platforma, supakuojanti programą ir visas jos priklausomybes konteineriu pavidalu. Šis talpinimo aspektas užtikrina, kad programa veikia bet kurioje aplinkoje.Kaip matome diagramoje, kiekviena programa veikia atskiruose konteineriuose ir turi savo priklausomybių ir bibliotekų rinkinį. Tai užtikrina, kad kiekviena programa yra nepriklausoma nuo kitų programų, suteikdama programuotojams garantiją, kad jie gali kurti programas, kurios netrukdys viena kitai.Taigi programuotojas gali pastatyti konteinerį, kuriame yra įdiegtos skirtingos programos, ir ją suteikti QA komandai. Tada kokybės užtikrinimo komandai tereikės paleisti sudėtinį rodinį, kad būtų pakartota kūrėjo aplinka. 3 pav. „Docker“ platformos diagrama„Dockerfile“, „Docker Images“ ir „Docker Containers“ yra trys svarbūs terminai naudojant „Docker“.4 pav. „Docker“ veikimas§ „Dockerfile“ yra tekstinis dokumentas, kuriame yra visos komandos, kurias vartotojas gali iškviesti komandinėje eilutėje, norėdamas surinkti „Docker Image“. „Docker Image“ gali kurti vaizdus automatiškai, skaitydamas „Docker file“ instrukcijas.§ „Docker Image“ galima palyginti su šablonu, kuris naudojamas kuriant „Docker Containers“. Taigi, šie tik skaitomi šablonai yra sudėtinio konteinerio elementai. „Docker Image“ vaizdai saugomi „Docker“ registre. Tai gali būti vartotojo kietajame diske arba išorinėje talpykloje, pvz., „Docker Hub“, leidžianti keliems vartotojams bendradarbiauti kuriant programą.§ „Docker Container“ testinę aplinką galime vadinti „Docker Image“ todėl, nes talpina visą paketą, reikalingą programai paleisti. Taigi, „Docker Container“ iš esmės yra parengtos programos, sukurtos iš „Docker Images“, o tai yra pagrindinis „Docker“ naudingumas. „Docker networking“ naudojamas užmegzti ryšį tarp „Docker“ konteinerių ir išorinio tinklo per pagrindinį kompiuterį arba galime sakyti, kad tai yra ryšio kanalas, per kurį visi izoliuoti konteineriai bendrauja tarpusavyje įvairiose situacijose, kad atliktų reikiamus veiksmus, toliau išskirsime kelis „Docker“ tinklo koncepcijas.Įdiegus „Docker“, jis automatiškai sukuria tris tinklus - „Bridge“, „Host“ ir „None“. Iš kurių „Bridge“ yra numatytasis tinklas, prie kurio konteineris pridedamas jį paleidus. 5 pav. „Docker networking“

Numatytasis „Bridge network“ arba dar kitaip vadinamas „docker0“ tinklas sukuriamas automatiškai ir naujai sukurti konteineriai prie jo prisijungiami taip pat. „Bridge“ tinklas priskiria jame esantiems konteinerius IP, kurių diapazonas yra 172.19.0.xx . Norėdami pasiekti šiuos konteinerius iš išorės, turite sujunti šių konteinerių prievadus su pagrindinio kompiuterio prievadais. Taip pat galima sukurti savo modifikuota „Bridge network“. Tokie tinklai dažniausiai būna pranašesni už numatytąjį tinklą. Sujungti konteineriai šiuo metodu, kaip matome paveikslėlyje, gali komunikuoti tarpusavyje per „mybridge“.6 pav. „Bridge network“ schema · „Host network“ – Atskiri konteineriai, pašalinama tinklo izoliaciją tarp konteinerio ir „Docker“ pagrindinio kompiuterio, tiesiogiai naudoja pagrindinio kompiuterio tinklą, konteineryje prieinamos visos pagrindinio kompiuterio sąsajos. Konteinerio „Docker host“ pavadinimas sutaps su pagrindinio kompiuterio pavadinimu 7 pav. „Host network“ schema· „None network“ konteineriai nėra prijungti prie tinklo ir neturi jokios prieigos prie išorinio tinklo ar kitų konteinerių. Šis tinklas naudojamas, kai norima visiškai išjungti tinklą. Tačiau turi atgalini adresą ir gali būti naudojamas paketiniams darbams vykdyti.8 pav. „None Network“ schema· „Overlay network“ – sukuria vidinį privatų tinklą, kuris apima visus konteinerius dalyvaujančius atskiruose „Docker host“, taip palengvina ryšį tarp aplikacijų viename ir atskirose konteineriuose. 9 pav. „Overlay network“ schema

Virtualiosios mašinos ir konteineriai skiriasi keliais aspektais, tačiau pagrindinis skirtumas yra tas, kad konteineriai suteikia galimybę vienu kompiuteriu realizuoti daugiau aplikacijų mažiau apkraunant sistemą, lyginant su VM. Šiai technologijai realizuoti ir vystytis padėjo dar 2013 m. pasirodžiusi platforma „Docker“. Ir todėl vis daugiau įmonių eina link konteinerių, „Dock networking“ yra svarbus konteinerių izoliavimui nuo aplinkos. Tai leidžia kurti saugiai veikiančias aplikacijas ir padeda geriau bendrauti tarp konteinerių. 1. https://www.docker.com/why-docker2. https://www.upgrad.com/blog/introduction-to-docker-networking/3. https://www.simplilearn.com/tutorials/docker-tutorial/docker-networking4. https://opensource.com/resources/what-docker5. https://blog.netapp.com/blogs/containers-vs-vms/6. https://docs.docker.com/network/