Izprotot Docker

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 — Ā«Izpratne par dockerĀ».

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.

Izprotot Docker

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 Docker Hub. 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 apvienoÅ”anas failu sistēmu 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 ubuntu lokālajā maŔīnā, un, ja tā nav — lejupielādē to no Docker Hub. 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 LXC. Nākotnē Docker, iespējams, atbalstÄ«s citus konteineru formātus, piemēram, integrējoties ar BSD Jails vai Solaris Zones.

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster