Programmēšana

Kas ir Dokers? Dzirkstele konteineru revolūcijai

Docker ir programmatūras platforma, lai izveidotu lietojumprogrammas, kuru pamatā ir konteineri - mazas un vieglas izpildes vides, kas kopīgi izmanto operētājsistēmas kodolu, bet citādi darbojas izolēti viena no otras. Kamēr konteineri kā jēdziens pastāv jau kādu laiku, Docker, 2013. gadā uzsāktais atvērtā koda projekts, palīdzēja popularizēt tehnoloģiju un palīdzēja virzīties uz virzību uz konteinerizēšana un mikropakalpojumi programmatūras izstrādē, kas kļuvusi pazīstama kā mākoņdatošanas attīstība.

Kas ir konteineri?

Viens no mūsdienu programmatūras izstrādes mērķiem ir saglabāt viena un tā paša saimniekdatora vai kopas lietojumprogrammas izolētas viena no otras, lai tās nevajadzīgi netraucētu viena otras darbībai vai uzturēšanai. Tas var būt grūti, pateicoties pakotnēm, bibliotēkām un citiem programmatūras komponentiem, kas nepieciešami to darbībai. Viens no šīs problēmas risinājumiem ir bijis virtuālās mašīnas, kas vienā un tajā pašā aparatūrā saglabā lietojumprogrammas pilnīgi atsevišķi un līdz minimumam samazina konfliktus starp programmatūras komponentiem un konkurenci par aparatūras resursiem. Bet virtuālās mašīnas ir apjomīgas - katrai nepieciešama sava operētājsistēma, tāpēc lielums parasti ir gigabaits, un tās ir grūti uzturēt un uzlabot.

Konteineriturpretī izolē lietojumprogrammu izpildes vides viena no otras, bet koplieto pamatā esošo OS kodolu. Parasti tos mēra megabaitos, tiek izmantoti daudz mazāk resursu nekā VM, un tie tiek palaisti gandrīz nekavējoties. Tos var daudz blīvāk iesaiņot tajā pašā aparatūrā un vērpt uz augšu un uz leju masveidā ar daudz mazāku piepūli un papildu izmaksām. Konteineri nodrošina ļoti efektīvu un ļoti detalizētu mehānismu programmatūras komponentu apvienošanai modernā uzņēmumā nepieciešamo lietojumprogrammu un pakalpojumu klāstā, kā arī šo programmatūras komponentu atjaunināšanai un uzturēšanai.

Dokers

Kas ir Dokers?

Docker ir atvērtā pirmkoda projekts, kas ļauj ērti izveidot konteinerus un uz konteineriem balstītas lietotnes. Sākotnēji būvēts operētājsistēmai Linux, Docker tagad darbojas arī operētājsistēmās Windows un MacOS. Lai saprastu, kā darbojas Docker, apskatīsim dažus komponentus, kurus izmantotu, lai izveidotu Docker konteinerizētas lietojumprogrammas.

Dockerfile

Katrs Docker konteiners sākas ar a Dockerfile. Dockerfile ir teksta fails, kas uzrakstīts viegli saprotamā sintaksē un ietver instrukcijas, kā izveidot Docker attēls (vairāk par to pēc mirkļa). Dockerfile norāda operētājsistēmu, kas ir konteinera pamatā, kā arī valodas, vides mainīgos, failu atrašanās vietas, tīkla porti un citus nepieciešamos komponentus - un, protams, ko konteiners faktiski darīs, kad mēs to palaidīsim.

Peidžam Niedringhausam ITNext vietnē ir labs Dockerfile sintakses sadalījums.

Dokera attēls

Kad esat uzrakstījis savu Dockerfile, jūs izsaucat Docker būvēt lietderība, lai izveidotu attēls pamatojoties uz šo Dockerfile. Tā kā Dockerfile ir instrukciju kopums, kas stāsta būvēt kā izveidot attēlu, Docker attēls ir pārnēsājams fails, kurā ir specifikācijas, kādām programmatūras sastāvdaļām konteiners darbosies un kā. Tā kā Dockerfile, iespējams, ietvers norādījumus par dažu programmatūras pakotņu sagrābšanu no tiešsaistes krātuvēm, jums vajadzētu būt uzmanīgiem, lai skaidri norādītu pareizās versijas, pretējā gadījumā jūsu Dockerfile var radīt pretrunīgus attēlus atkarībā no tā, kad tā tiek izsaukta. Bet, kad attēls ir izveidots, tas ir statisks. Codefresh piedāvā sīkāk apskatīt, kā veidot attēlu.

Dokera skrējiens

Dokers palaist lietderība ir komanda, kas faktiski palaiž konteineru. Katrs konteiners ir instancē attēla. Konteineri ir veidoti kā pārejoši un īslaicīgi, taču tos var apturēt un restartēt, tādējādi konteiners tiek palaists tādā pašā stāvoklī kā tad, kad tas tika apturēts. Turklāt vienlaikus var palaist vairākus viena attēla konteinera gadījumus (ja vien katram konteineram ir unikāls nosaukums). Kodeksa pārskatā ir sniegts lielisks dažādu opciju sadalījums palaist komandu, lai jūs sajustu, kā tas darbojas.

Dokera centrmezgls

Lai gan konteineru veidošana ir vienkārša, nemaz neiedomājieties, ka jums būs jāveido katrs attēls no jauna. Docker Hub ir SaaS krātuve konteineru koplietošanai un pārvaldībai, kurā atradīsit oficiālos Docker attēlus no atvērtā pirmkoda projektiem un programmatūras piegādātājiem un neoficiālus plašas sabiedrības attēlus. Jūs varat lejupielādēt konteinera attēlus ar noderīgu kodu vai augšupielādēt savu, koplietot tos atklāti vai padarīt tos par privātiem. Ja vēlaties, varat izveidot arī vietējo Docker reģistru. (Docker Hub agrāk ir bijušas problēmas ar attēliem, kas augšupielādēti ar tajos iebūvētām aizmugurējām durvīm.)

Docker dzinējs

Docker Engine ir Docker, klienta-servera tehnoloģijas pamatā, kas rada un vada konteinerus. Vispārīgi runājot, kad kāds saka Dokers vispārīgi un nerunā par uzņēmumu vai kopējo projektu, tie nozīmē Docker Engine. Piedāvājumā ir divas dažādas Docker Engine versijas: Docker Engine Enterprise un Docker Engine Community.

Docker kopienas izdevums

Dokers atbrīvoja to Enterprise Edition 2017. gadā, taču tā sākotnējais piedāvājums, kas pārdēvēts par Docker Community Edition, joprojām ir atvērts un bezmaksas, un šajā procesā nezaudēja nevienu funkciju. Tā vietā Enterprise Edition, kas maksā 1500 USD par mezglu gadā, pievienoja uzlabotas pārvaldības funkcijas, tostarp klasteru un attēlu pārvaldības vadīklas un ievainojamības uzraudzību. BlogBoat emuārā ir aprakstītas izdevumu atšķirības.

Kā Dokers iekaroja konteineru pasauli

Ideja, ka konkrēto procesu var palaist ar zināmu izolāciju no pārējās tā darbības vides, jau gadu desmitiem ir iebūvēta tādās Unix operētājsistēmās kā BSD un Solaris. Sākotnējā Linux konteineru tehnoloģija LXC ir OS līmeņa virtualizācijas metode vairāku izolētu Linux sistēmu darbināšanai vienā resursdatorā. LXC nodrošināja divas Linux funkcijas: nosaukumvietas, kas aptver sistēmas resursu kopumu un iepazīstina tos ar procesu, lai izskatās, ka tās ir veltītas šim procesam; un cgroups, kas regulē sistēmas resursu, piemēram, CPU un atmiņas, izolāciju un izmantošanu procesu grupai.

Konteineri atdala lietojumprogrammas no operētājsistēmām, kas nozīmē, ka lietotājiem var būt tīra un minimāla Linux operētājsistēma, un visu pārējo var palaist vienā vai vairākos izolētos konteineros. Tā kā operētājsistēma tiek atdalīta no konteineriem, konteineru varat pārvietot pa jebkuru Linux serveri, kas atbalsta konteinera izpildlaika vidi.

Docker ieviesa vairākas būtiskas izmaiņas LXC, kas konteinerus padara pārnēsājamākus un elastīgākus lietošanai. Izmantojot Docker konteinerus, darba slodzi varat izvietot, kopēt, pārvietot un dublēt vēl ātrāk un vienkāršāk, nekā to var izdarīt, izmantojot virtuālās mašīnas. Docker nodrošina mākoņveidīgu elastību jebkurai infrastruktūrai, kas spēj darbināt konteinerus. Docker konteinera attēlu rīki bija arī sasniegums LXC, ļaujot izstrādātājam veidot attēlu bibliotēkas, komponēt lietojumprogrammas no vairākiem attēliem un palaist šos konteinerus un lietojumprogrammas vietējā vai attālā infrastruktūrā.

Docker Compose, Docker Swarm un Kubernetes

Docker arī atvieglo uzvedības koordinēšanu starp konteinerus un tādējādi izveidojiet lietojumprogrammu kaudzes, savienojot konteinerus kopā. Docker Compose izveidoja Docker, lai vienkāršotu vairāku konteineru lietojumprogrammu izstrādes un testēšanas procesu. Tas ir komandrindas rīks, kas atgādina Docker klientu, un tajā tiek ievietots speciāli formatēts deskriptora fails, lai no vairākiem konteineriem apkopotu lietojumprogrammas un palaistu tās kopā vienā resursdatorā. (Lai uzzinātu vairāk, skatiet Docker Compose apmācību.)

Šīs uzvedības uzlabotas versijas - tā sauktās konteineru orķestrēšana—Piedāvā citi produkti, piemēram, Docker Swarm un Kubernetes. Bet Dokers nodrošina pamatus. Pat ja Swarm izauga no Docker projekta, Kubernetes ir kļuvis par de facto Docker orķestrēšanas platforma pēc izvēles.

Docker priekšrocības

Docker konteineri nodrošina veidu, kā izveidot uzņēmuma un uzņēmējdarbības jomas lietojumprogrammas, kuras ir vieglāk montēt, uzturēt un pārvietoties nekā parastie kolēģi. 

Docker konteineri nodrošina izolāciju un droseli

Docker konteineri saglabā lietotnes izolētas ne tikai viena no otras, bet arī no pamata sistēmas. Tas nodrošina ne tikai tīrāku programmatūras kaudzi, bet arī vieglāk diktēt, kā konkrētā konteinerizētā lietojumprogramma izmanto sistēmas resursus - CPU, GPU, atmiņu, I / O, tīklošanu un tā tālāk. Tas arī atvieglo datu un koda glabāšanu atsevišķi. (Skatiet zemāk sadaļu “Docker konteineri ir bezvalstnieki un nemaināmi.”)

Docker konteineri nodrošina pārvietojamību

Docker konteiners darbojas ar jebkuru mašīnu, kas atbalsta konteinera izpildlaiku. Lietojumprogrammām nav jābūt piesaistītām resursdatora operētājsistēmai, tāpēc gan lietojumprogrammas vidi, gan pamata darbības vidi var uzturēt tīru un minimālu.

Piemēram, MySQL for Linux konteiners darbosies lielākajā daļā Linux sistēmu, kas atbalsta konteinerus. Visas lietotnes atkarības parasti tiek piegādātas vienā konteinerā.

Uz konteineriem balstītas lietotnes var viegli pārvietot no on-prem sistēmām uz mākoņu vidēm vai no izstrādātāju klēpjdatoriem uz serveriem, ja vien mērķa sistēma atbalsta Docker un jebkuru no trešo pušu rīkiem, kas ar to var tikt izmantoti, piemēram, Kubernetes (skatiet zemāk “Dokeru konteineri atvieglo orķestrēšanu un mērogošanu”).

Parasti Docker konteinera attēli jāveido konkrētai platformai. Piemēram, Windows konteiners nedarbosies Linux un otrādi. Iepriekš viens veids, kā apiet šo ierobežojumu, bija palaist virtuālo mašīnu, kas palaida nepieciešamās operētājsistēmas instanci, un palaist konteineru virtuālajā mašīnā.

Tomēr Docker komanda kopš tā laika ir izstrādājusi elegantāku risinājumu, ko saucizpaužas, kas ļauj vairāku operētājsistēmu attēlus vienā un tajā pašā attēlā iesaiņot. Manifesti joprojām tiek uzskatīti par eksperimentāliem, taču tie norāda, kā konteineri varētu kļūt par starpplatformu lietojumprogrammu risinājumu, kā arī par pārrobežu vidi. 

Docker konteineri ļauj salikt

Lielākā daļa biznesa lietojumprogrammu sastāv no vairākiem atsevišķiem komponentiem, kas sakārtoti kaudzē - tīmekļa servera, datu bāzes, atmiņā esošās kešatmiņas. Konteineri ļauj salikt šos gabalus funkcionālā vienībā ar viegli maināmām detaļām. Katru gabalu nodrošina cits konteiners, un to var uzturēt, atjaunināt, nomainīt un modificēt neatkarīgi no citiem.

Būtībā tas ir lietojumprogrammu dizaina mikropakalpojumu modelis. Sadalot lietojumprogrammu funkcionalitāti atsevišķos, patstāvīgos pakalpojumos, mikropakalpojumu modelis piedāvā pretlīdzekli lēniem tradicionālajiem attīstības procesiem un neelastīgām monolītām lietotnēm. Vieglie un pārnēsājamie konteineri atvieglo uz mikropakalpojumiem balstītu lietojumprogrammu izveidi un uzturēšanu.

Docker konteineri atvieglo orķestrēšanu un mērogošanu

Tā kā konteineri ir viegli un uzliek maz papildu izmaksas, attiecīgajā sistēmā ir iespējams palaist daudz vairāk. Bet konteinerus var izmantot arī, lai mērogotu lietojumprogrammu visā sistēmu kopās un paaugstinātu vai pazeminātu pakalpojumus, lai apmierinātu pieprasījuma kāpumu vai saglabātu resursus.

Lielākā daļa uzņēmuma līmeņa rīku izvietošanas, pārvaldīšanas un mērogošanas rīku versijas tiek nodrošinātas ar trešo personu projektiem. Galvenais no tiem ir Google Kubernetes - sistēma, kas ļauj automatizēt konteineru izvietošanu un mērogošanu, kā arī to, kā tie ir savienoti kopā, sabalansēti un pārvaldīti. Kubernetes piedāvā arī veidus, kā izveidot un atkārtoti izmantot vairāku konteineru lietojumprogrammu definīcijas vai “Helm diagrammas”, lai pēc pieprasījuma varētu izveidot un pārvaldīt sarežģītas lietotņu kopas.

Docker ietver arī savu iebūvēto orķestrēšanas sistēmu Swarm režīmā, kas joprojām tiek izmantota gadījumiem, kas ir mazāk prasīgi. Tas nozīmē, ka Kubernetes ir kļuvis par noklusējuma izvēli; faktiski Kubernetes ir komplektā ar Docker Enterprise Edition.

Dokers brīdina

Konteineri atrisina ļoti daudzas problēmas, taču tās nav visas zāles. Daži no viņu trūkumiem ir pēc konstrukcijas, bet citi ir to dizaina blakusprodukti.

Docker konteineri nav virtuālas mašīnas

Visizplatītākā konceptuālā kļūda, ko cilvēki pieļauj ar konteineriem, ir to pielīdzināšana virtuālajām mašīnām. Tomēr, tā kā konteineros un virtuālajās mašīnās tiek izmantoti dažādi izolācijas mehānismi, tiem ir izteikti atšķirīgas priekšrocības un trūkumi.

Virtuālās mašīnas nodrošina augstu procesu izolāciju, jo tās darbojas pašu operētājsistēmas gadījumā. Arī šai operētājsistēmai nav jābūt tādai pašai kā tai, kas darbojas saimniekdatorā. Windows virtuālā mašīna var darboties ar Linux hipervizoru un otrādi.

Konteineros savukārt tiek izmantotas kontrolētas resursdatora operētājsistēmas resursu daļas; daudzām lietojumprogrammām ir viens un tas pats OS kodols, ļoti pārvaldītā veidā. Rezultātā konteineros ievietotās lietotnes nav tik rūpīgi izolētas kā virtuālās mašīnas, taču tās nodrošina pietiekamu izolāciju lielākajai daļai slodžu.

Docker konteineri nenodrošina ātrumu bez metāla

$config[zx-auto] not found$config[zx-overlay] not found