Jau vairÄkus mÄneÅ”us izmantoju docker, lai strukturÄtu tÄ«mekļa projektu izstrÄdes un piegÄdes procesu. PiedÄvÄju Ā«HabrhabraĀ» lasÄ«tÄjiem ievada raksta par docker tulkojumu ā .
Kas ir docker?
Docker ir atvÄrta platforma lietojumprogrammu izstrÄdei, piegÄdei un darbÄ«bai. Docker ir izstrÄdÄts, lai ÄtrÄk ieviestu jÅ«su lietojumprogrammas. Ar docker palÄ«dzÄ«bu jÅ«s varat atdalÄ«t savu lietojumprogrammu no infrastruktÅ«ras un izturÄties pret infrastruktÅ«ru kÄ pret pÄrvaldÄmu lietojumprogrammu. Docker palÄ«dz ÄtrÄk ieviest jÅ«su kodu, ÄtrÄk veikt testus, ÄtrÄk izlaist lietojumprogrammas un samazinÄt laiku starp koda rakstīŔanu un palaiÅ”anu. Docker to panÄk ar vieglu konteineru virtualizÄcijas platformu, izmantojot procesus un rÄ«kus, kas palÄ«dz pÄrvaldÄ«t un izlaist jÅ«su lietojumprogrammas.
Docker kodols ļauj palaist praktiski jebkuru lietojumprogrammu, kas droÅ”i izolÄta konteinerÄ. DroÅ”a izolÄcija ļauj vienÄ hostÄ vienlaicÄ«gi palaist vairÄkus konteinerus. VieglÄ konteineru dabu, kas tiek palaista bez papildu hipervizora slodzes, ļauj jums maksimÄli izmantot jÅ«su aparatÅ«ru.
Konteineru virtualizÄcijas platforma un rÄ«ki var bÅ«t noderÄ«gi Å”Ädos gadÄ«jumos:
- jÅ«su lietojumprogrammas (un tajÄ paÅ”Ä laikÄ izmantoto komponentu) iepakoÅ”ana docker konteineros;
- Å”o konteineru izplatīŔana un piegÄde jÅ«su komandÄm izstrÄdei un testÄÅ”anai;
- Å”os konteinerus izlaist jÅ«su ražoÅ”anas vidÄ, gan datu centros, gan mÄkoÅos.
KÄ es varu izmantot docker?
Ätra jÅ«su lietojumprogrammu izlaide
Docker ir lieliski piemÄrots izstrÄdes cikla organizÄÅ”anai. Docker ļauj izstrÄdÄtÄjiem izmantot vietÄjos konteinerus ar lietojumprogrammÄm un pakalpojumiem. Tas vÄlÄk ļauj integrÄties nepÄrtrauktas integrÄcijas un izlaiduma procesÄ (continuous integration and deployment workflow).
PiemÄram, jÅ«su izstrÄdÄtÄji raksta kodu lokÄli un dalÄs ar savu izstrÄdes steku (docker attÄlu komplektu) ar kolÄÄ£iem. Kad viÅi ir gatavi, viÅi nosÅ«ta kodu un konteinerus uz testÄÅ”anas vidi un veic visus nepiecieÅ”amos testus. No testÄÅ”anas vides viÅi var nosÅ«tÄ«t kodu un attÄlus uz ražoÅ”anu.
VienkÄrÅ”Äka izlaide un izvietoÅ”ana
Tikai ar konteineriem balstÄ«ta docker platforma ļauj viegli pÄrvietot jÅ«su slodzi. Docker konteineri var darboties jÅ«su lokÄlajÄ datorÄ, gan reÄlÄ, gan virtuÄlÄ maŔīnÄ datu centrÄ, kÄ arÄ« mÄkoÅos.
PÄrvietojamÄ«ba un viegla docker daba ļauj viegli dinamisku pÄrvaldÄ«bu ar jÅ«su slodzi. JÅ«s varat izmantot docker, lai izvietotu vai izslÄgtu savu lietotni vai pakalpojumus. Docker Ätrums ļauj to darÄ«t gandrÄ«z reÄlajÄ laikÄ.
Augstas slodzes un vairÄk slodžu
Docker ir viegls un Ätrs. Tas nodroÅ”ina stabilu, izmaksu efektÄ«vu alternatÄ«vu virtuÄlajÄm maŔīnÄm, kas balstÄs uz hipervizoru. Tas ir Ä«paÅ”i noderÄ«gs apstÄkļos ar augstÄm slodzÄm, piemÄram, veidojot savu mÄkoÅa vai platformas-kÄ-pakalpojuma (platform-as-service) risinÄjumus. TaÄu tas ir arÄ« noderÄ«gs maziem un vidÄjiem lietojumiem, kad vÄlaties maksimÄli izmantot pieejamos resursus.
Galvenie Docker komponenti
Docker sastÄv no diviem galvenajiem komponentiem:
- Docker: atvÄrtÄ koda virtualizÄcijas platforma;
- Docker Hub: mÅ«su platforma-kÄ-pakalpojums docker konteineru izplatīŔanai un pÄrvaldÄ«bai.
PiezÄ«me! Docker tiek izplatÄ«ts saskaÅÄ ar Apache 2.0 licenci.
Docker arhitektūra
Docker izmanto klienta-servera arhitektÅ«ru. Docker klients sazinÄs ar Docker demonu, kurÅ” uzÅemas slogu jÅ«su konteineru izveidÄ, palaiÅ”anÄ un sadalÄ. Abi, klients un serveris var darboties uz vienas sistÄmas, jÅ«s varat pieslÄgt klientu attÄlinÄtam docker demona. Klients un serveris sazinÄs caur soketu vai caur RESTful API.

Docker demons
KÄ redzams diagrammÄ, demons uzsÄkas uz hosta maŔīnas. LietotÄjs nesazinÄs tieÅ”i ar serveri, bet izmanto tam klientu.
Docker klients
Docker klients, programma docker ā galvenais saskarne ar Docker. Tas saÅem komandas no lietotÄja un mijiedarbojas ar docker demon.
IekÅ” docker
Lai saprastu, no kÄ sastÄv docker, jums jÄzina par trim komponentiem:
- attÄli (images)
- reģistri (registries)
- konteineri
AttÄli
Docker attÄls ir lasÄmÄ forma balstÄ«ts veidne. PiemÄram, attÄls var ietvert Ubuntu operÄtÄjsistÄmu ar Apache un tajÄ esoÅ”u lietojumprogrammu. AttÄli tiek izmantoti konteineru izveidei. Docker ļauj viegli izveidot jaunus attÄlus, atjauninÄt esoÅ”os, vai arÄ« varat lejupielÄdÄt attÄlus, ko izveidojuÅ”i citi cilvÄki. AttÄli ir docker bÅ«vniecÄ«bas komponents.
Reģistrs
Docker reÄ£istrs glabÄ attÄlus. PastÄv publiskie un privÄtie reÄ£istri, no kuriem var lejupielÄdÄt vai augÅ”upielÄdÄt attÄlus. Publiskais Docker reÄ£istrs ir . TajÄ ir milzÄ«ga attÄlu kolekcija. KÄ jÅ«s zinÄt, attÄlus varat izveidot paÅ”i vai arÄ« izmantot attÄlus, ko izveidojuÅ”i citi. ReÄ£istri ir izplatīŔanas komponents.
Tvertnes
Konteineri ir lÄ«dzÄ«gi direktorijÄm. Konteineros ir viss, kas nepiecieÅ”ams lietojumprogrammas darbÄ«bai. Katrs konteiners tiek izveidots no attÄla. Konteinerus var izveidot, palaist, apturÄt, pÄrvietot vai dzÄst. Katrs konteiners ir izolÄts un ir droÅ”a platforma lietojumprogrammai. Konteineri ir darbÄ«bas komponents.
KÄ darbojas Docker?
PaÅ”laik mÄs zinÄm, ka:
- varam izveidot attÄlus, kuros atrodas mÅ«su lietojumprogrammas;
- varam izveidot konteinerus no attÄliem, lai palaistu lietojumprogrammas;
- varam izplatÄ«t attÄlus caur Docker Hub vai citu attÄlu reÄ£istru.
ApskatÄ«sim, kÄ Å”ie komponenti ir saistÄ«ti.
KÄ darbojas attÄls?
Jau zinÄm, ka attÄls ir lasÄmÄ forma balstÄ«ta veidne, no kuras tiek izveidots konteiners. Katrs attÄls sastÄv no komplekta slÄÅu. Docker izmanto lai apvienotu Å”os slÄÅus vienÄ attÄlÄ. ApvienoÅ”anas failu sistÄma ļauj failiem un direktorijÄm no dažÄdÄm failu sistÄmÄm (atŔķirÄ«gÄm filiÄlÄm) caurspÄ«dÄ«gi pÄrklÄties, radot koherentu failu sistÄmu.
Viena no iemeslÄm, kÄdÄļ docker ir viegla svara, ir Å”Ädu slÄÅu izmantoÅ”ana. Kad jÅ«s mainÄt attÄlu, piemÄram, atjauninot lietojumprogrammu, tiek izveidots jauns slÄnis. TÄdÄjÄdi, neradot nomainÄ«t visu attÄlu vai pÄrstrukturÄt to, kÄ tas var bÅ«t jÄdara ar virtuÄlo maŔīnu, tikai slÄnis tiek pievienots vai atjauninÄts. Un jums nav jÄizplata viss jaunais attÄls, tiek izplatÄ«ta tikai atjauninÄjums, kas ļauj izplatÄ«t attÄlus vieglÄk un ÄtrÄk.
Katras attÄls balstÄs uz bÄzes attÄlu. PiemÄram, ubuntu ir bÄzes attÄls Ubuntu, vai fedora ir bÄzes attÄls Fedora distribÅ«cijai. JÅ«s varat izmantot attÄlus kÄ pamatu jaunu attÄlu izveidei. PiemÄram, ja jums ir attÄls apache, varat to izmantot kÄ bÄzes attÄlu jÅ«su tÄ«mekļa lietojumprogrammÄm.
PiezÄ«me! Docker parasti Åem attÄlus no Docker Hub reÄ£istra.
Docker attÄli var tikt izveidoti no Å”iem bÄzes attÄliem, un soļi, kas apraksta Å”o attÄlu izveidi, tiek dÄvÄti par instrukcijÄm. Katrs norÄdÄ«jums izveido jaunu attÄlu vai slÄni. Instrukcijas bÅ«s Å”Ädas darbÄ«bas:
- komandas izpilde
- faila vai direktorijas pievienoŔana
- vides mainÄ«gÄ izveide
- norÄdÄ«jums, ko palaist, kad tiek palaists Ŕī attÄla konteineris
Å Ä«s instrukcijas tiek glabÄtas failÄ Dockerfile. Docker to lasa Dockerfile, kad jÅ«s veidojat attÄlu, izpilda Ŕīs instrukcijas un atgriež galÄ«go attÄlu.
KÄ darbojas docker reÄ£istrs?
ReÄ£istrs ir docker attÄlu krÄtuve. PÄc attÄla izveides jÅ«s varat to publicÄt publiskajÄ reÄ£istrÄ Docker Hub vai savÄ privÄtajÄ reÄ£istrÄ.
Izmantojot docker klientu, varat meklÄt jau publicÄtus attÄlus un lejupielÄdÄt tos savÄ maŔīnÄ ar docker, lai izveidotu konteinerus.
Docker Hub nodroÅ”ina publiskus un privÄtus attÄlu krÄtuves. MeklÄÅ”ana un lejupielÄde no publiskajÄm glabÄtavÄm ir pieejama visiem. PrivÄtÄs glabÄtuves saturs neparÄdÄs meklÄÅ”anas rezultÄtos. Tikai jÅ«s un jÅ«su lietotÄji var piekļūt Å”iem attÄliem un izveidot no tiem konteinerus.
KÄ darbojas konteiners?
Konteiners sastÄv no operÄtÄjsistÄmas, lietotÄja failiem un metadatiem. KÄ mÄs zinÄm, katrs konteiners tiek izveidots no attÄla. Å is attÄls saka docker, kas ir konteinerÄ, kÄdu procesu palaist, kad tiek palaists konteiners, un citus konfigurÄcijas datus. Docker attÄls ir pieejams tikai lasīŔanai. Kad docker palaidÄ«s konteineru, tas izveidos lasīŔanas/rakstīŔanas slÄni virs attÄla (izmantojot union file system, kÄ iepriekÅ” norÄdÄ«ts), kurÄ var tikt palaista lietojumprogramma.
Kas notiek, kad tiek palaists konteiners?
Vai nu, izmantojot programmu docker, vai izmantojot RESTful API, docker klients saka docker demonam palaist konteineru.
$ sudo docker run -i -t ubuntu /bin/bash
PaskatÄ«simies uz Å”o komandu. Klients tiek palaists, izmantojot komandu docker, ar opciju run, kas saka, ka tiks palaists jauns containers. MinimÄlÄs prasÄ«bas konteineru palaiÅ”anai ir Å”Ädi atribÅ«ti:
- kÄdu attÄlu izmantot konteineru izveidei. MÅ«su gadÄ«jumÄ
ubuntu - komanda, ko vÄlaties palaist, kad kontainers tiks palaists. MÅ«su gadÄ«jumÄ
/bin/bash
Kas notiek aizskatuves, kad mÄs palaist Å”o komandu?
Docker, secÄ«gi, veic Å”Ädas darbÄ«bas:
- lejupielÄdÄ attÄlu ubuntu: docker pÄrbauda attÄla pieejamÄ«bu
ubuntulokÄlajÄ maŔīnÄ, un, ja tÄ nav ā lejupielÄdÄ to no . Ja attÄls ir, tad izmanto to, lai izveidotu kontaineru; - izveido kontaineru: kad attÄls ir saÅemts, docker izmanto to, lai izveidotu kontaineru;
- inicializÄ failu sistÄmu un montÄ read-only lÄ«meni: kontainers izveidots failu sistÄmÄ, un read-only lÄ«menis pievienots attÄlam;
- inicializÄ tÄ«klu/tiltu: izveido tÄ«kla interfeisu, kas ļauj docker sazinÄties ar saimniekmaŔīnu;
- Iestata IP adresi: atrod un nosaka adresi;
- Palaista norÄdÄ«to procesu: palaista jÅ«su lietotni;
- ApstrÄdÄ un nodroÅ”ina jÅ«su lietotnes izvadi: pievienojas un reÄ£istrÄ standarta ievadi, izvadi un kļūdu plÅ«smu jÅ«su lietotnÄ, lai jÅ«s varÄtu sekot, kÄ darbojas jÅ«su lietotne.
Tagad jums ir strÄdÄjoÅ”s kontainers. JÅ«s varat pÄrvaldÄ«t savu kontaineru, mijiedarboties ar savu lietotni. Kad nolemjat apturÄt lietotni, izdzÄsiet kontaineru.
IzmantotÄs tehnoloÄ£ijas
Docker ir uzrakstÄ«ts Go valodÄ un izmanto dažas Linux kodola iespÄjas, lai realizÄtu iepriekÅ” minÄto funkcionalitÄti.
NoslÄpumi (namespaces)
Docker izmanto tehnoloÄ£iju nosaukumu telpas lai organizÄtu izolÄtus darba laukus, ko mÄs saucam par konteineriem. Kad mÄs palaist kontaineru, docker izveido noslÄpumu kopumu Å”im konteineram.
Tas rada izolÄtu lÄ«meni, katrs aspekts konteinerÄ tiek palaists savÄ noslÄpumÄ un nav piekļuves ÄrÄjai sistÄmai.
DaļÄjs noslÄpumu saraksts, ko izmanto docker:
- pid: procesu izolÄcijai;
- net: tÄ«kla interfeisu pÄrvaldÄ«bai;
- ipc: IPC resursu pÄrvaldÄ«bai. (ICP: Starpprocessu komunikÄcija);
- mnt: montÄÅ”anas punktu pÄrvaldÄ«bai;
- utc: kodola izolÄcijai un versiju Ä£enerÄÅ”anas kontrolei (UTC: Unix laika dalīŔanas sistÄma).
Kontroles grupas
Docker arÄ« izmanto tehnoloÄ£iju cgroups vai kontroles grupas. AtslÄga, lai lietojumprogramma darbotos izolÄti, ir nodroÅ”inÄt lietojumprogrammai tikai tÄs resursus, kurus vÄlaties pieŔķirt. Tas garantÄ, ka konteineri bÅ«s labi kaimiÅi. Kontroles grupas ļauj dalÄ«t pieejamos aparatÅ«ras resursus un, ja nepiecieÅ”ams, noteikt robežas un ierobežojumus. PiemÄram, ierobežot iespÄjamo atmiÅas apjomu konteineram.
ApvienotÄ failu sistÄma
ApvienotÄ failu sistÄma jeb UnionFS ir failu sistÄma, kas darbojas, izveidojot slÄÅus, padarot to ļoti vieglu un Ätru. Docker izmanto UnionFS, lai izveidotu blokus, no kuriem tiek veidots konteiners. Docker var izmantot vairÄkas UnionFS variÄcijas, tostarp: AUFS, btrfs, vfs un DeviceMapper.
Konteineru formÄti
Docker apvieno Å”os komponentus ietvarÄ, ko mÄs saucam par konteineru formÄtu. NoklusÄjuma izmantotais formÄts tiek saukts libcontainer. TÄpat docker atbalsta tradicionÄlo konteineru formÄtu Linux, izmantojot . NÄkotnÄ Docker, iespÄjams, atbalstÄ«s citus konteineru formÄtus, piemÄram, integrÄjoties ar BSD Jails vai Solaris Zones.
Avots: habr.com
