Programavimas

„Containers 101“: „Docker“ pagrindai

„Docker“ pradėjo veikti 2012 m. Kaip atvirojo kodo projektas, iš pradžių pavadintas „dotcloud“, skirtas kurti vienos programos „Linux“ konteinerius. Nuo tada „Docker“ tapo nepaprastai populiaria kūrimo priemone, vis dažniau naudojama kaip vykdymo trukmės aplinka. Keletas technologijų, jei tokių yra, kūrėjus patraukė taip greitai, kaip ir „Docker“.

Viena iš priežasčių, kodėl „Docker“ yra tokia populiari, yra ta, kad ji žada „kurk vieną kartą, bėk bet kur“. „Docker“ siūlo paprastą būdą pakuoti programą ir jos priklausomybę vykdymo metu į vieną konteinerį; ji taip pat pateikia vykdymo laiko abstrakciją, kuri leidžia konteineriui paleisti skirtingas „Linux“ branduolio versijas.

Naudodamasis „Docker“ kūrėjas gali sukurti talpykloje esančią programą savo darbo vietoje, tada lengvai įdėti konteinerį į bet kurį „Docker“ palaikantį serverį. Nereikia iš naujo išbandyti ar perkrauti talpyklos serverio aplinkai, tiek debesyje, tiek patalpose.

Be to, „Docker“ pateikia programinės įrangos bendrinimo ir platinimo mechanizmą, kuris leidžia kūrėjams ir operacijų komandoms lengvai dalytis ir pakartotinai naudoti konteinerių turinį. Šis paskirstymo mechanizmas kartu su perkeliamumu visose mašinose padeda atsižvelgti į „Docker“ populiarumą operacijų komandose ir kūrėjams.

Docker komponentai

„Docker“ yra ir kūrimo priemonė, ir vykdymo trukmės aplinka. Norėdami suprasti „Docker“, pirmiausia turime suprasti „Docker“ konteinerio atvaizdo sąvoką. Konteineris visada prasideda vaizdu ir yra laikomas to vaizdo akimirksniu. Vaizdas yra statinė specifikacija, koks turėtų būti sudėtinis rodinys vykdymo metu, įskaitant programos kodą talpykloje ir vykdymo laiko konfigūracijos parametrus. „Docker“ vaizduose yra tik skaitymo sluoksniai, o tai reiškia, kad sukūrus vaizdą jis niekada nemodifikuojamas.

1 paveiksle pateiktas konteinerio atvaizdo pavyzdys. Šiame paveikslėlyje pavaizduotas „Ubuntu“ vaizdas su „Apache“ diegimu. Vaizdas sudarytas iš trijų pagrindinių „Ubuntu“ sluoksnių ir atnaujinimo sluoksnio, o „Apache“ sluoksnis ir pasirinktinis failų sluoksnis viršuje.

Veikiantis „Docker“ konteineris yra vaizdo akimirksnis. Iš to paties vaizdo gautos talpyklos yra identiškos viena nuo kitos pagal savo taikymo kodą ir priklausomybę nuo vykdymo laiko. Tačiau skirtingai nuo vaizdų, kurie yra tik skaitomi, veikiančiuose sudėtiniuose rodiniuose yra tik rašomo turinio viršaus rašomasis sluoksnis (sudėtinio rodinio sluoksnis). Vykdymo laiko pakeitimai, įskaitant bet kokius duomenų ir failų rašymus ir atnaujinimus, išsaugomi sudėtinio rodinio sluoksnyje. Taigi, keliuose vienu metu veikiančiuose sudėtiniuose rodiniuose, turinčiuose tą patį pagrindinį vaizdą, gali būti skirtingi konteinerių sluoksniai.

Ištrynus veikiantį sudėtinį rodinį, įrašomasis konteinerio sluoksnis taip pat ištrinamas ir jo nebus. Vienintelis būdas išlaikyti pokyčius yra aiškus dokininkas įsipareigoja komandą prieš ištrinant talpyklą. Kai atliksite a dokininkas įsipareigoja, veikiančio konteinerio turinys, įskaitant įrašomąjį sluoksnį, įrašomas į naują konteinerio vaizdą ir saugomas diske. Tai tampa nauju vaizdu, kuris skiriasi nuo vaizdo, kuriuo konteineris buvo supaprastintas.

Naudojant šį aiškų dokininkas įsipareigoja komandą, galima sukurti nuoseklų, atskirą „Docker“ vaizdų rinkinį, kiekvienas pastatytas ant ankstesnio vaizdo. Be to, „Docker“ naudoja kopijavimo ant rašymo strategiją, kad sumažintų konteinerių ir vaizdų, turinčių tuos pačius pagrindinius komponentus, saugojimo pėdsakus. Tai padeda optimizuoti saugyklos vietą ir sumažinti konteinerio pradžios laiką.

2 paveiksle pavaizduotas skirtumas tarp vaizdo ir veikiančio konteinerio. Atminkite, kad kiekvienas veikiantis konteineris gali turėti skirtingą rašomą sluoksnį.

Be vaizdo koncepcijos, „Docker“ turi keletą specifinių komponentų, kurie skiriasi nuo tradiciniuose „Linux“ konteineriuose esančių komponentų.

  • Dockerio demonas. Taip pat žinomas kaip „Docker Engine“, „Docker“ demonas yra plonas sluoksnis tarp konteinerių ir „Linux“ branduolio. „Docker“ demonas yra nuolatinė vykdymo laiko aplinka, valdanti programų sudėtinius rodinius. Bet kuris „Docker“ konteineris gali veikti bet kuriame serveryje, kuriame įgalinta „Docker-daemon“, neatsižvelgiant į pagrindinę operacinę sistemą.
  • Dockerfile. Kūrėjai naudoja „Dockerfiles“ kurdami konteinerių vaizdus, ​​kurie vėliau tampa rodomų konteinerių pagrindu. „Dockerfile“ yra tekstinis dokumentas, kuriame yra visa konfigūracijos informacija ir komandos, reikalingos konteinerio atvaizdui surinkti. Naudodamas „Dockerfile“, „Docker“ demonas gali automatiškai sukurti konteinerio vaizdą. Šis procesas labai supaprastina sudėtinių rodinių kūrimo veiksmus.

Tiksliau, „Dockerfile“ pirmiausia nurodykite pagrindinį vaizdą, nuo kurio pradedamas kurti procesas. Tada nurodote eilę komandų, po kurių bus galima sukurti naują sudėtinio rodinio vaizdą.

  • „Docker“ komandinės eilutės sąsajos įrankiai. „Docker“ pateikia CLI komandų rinkinį, skirtą valdyti vaizdų talpyklų gyvavimo ciklą. „Docker“ komandos apima kūrimo funkcijas, tokias kaip kūrimas, eksportavimas ir žymėjimas, taip pat vykdymo laiko funkcijas, pvz., Sudėtinio rodinio paleidimą, ištrynimą, paleidimą ir sustabdymą ir kt.

Galite vykdyti „Docker“ komandas prieš tam tikrą „Docker“ demoną ar registrą. Pvz., Jei vykdote dokininkas -ps komandą, „Docker“ grąžins daemonuose veikiančių konteinerių sąrašą.

Turinio platinimas naudojant „Docker“

Be vykdymo aplinkos ir talpyklų formatų, „Docker“ pateikia programinės įrangos platinimo mechanizmą, paprastai žinomą kaip registrą, kuris palengvina konteinerių turinio paiešką ir platinimą.

Registro samprata yra labai svarbi „Docker“ sėkmei, nes ji suteikia komunalinių paslaugų rinkinį, skirtą pakuoti, išsiųsti, laikyti, atrasti ir pakartotinai naudoti konteinerių turinį. Bendrovė „Docker“ valdo viešą nemokamą registrą, vadinamą „Docker Hub“.

  • Registras. „Docker“ registras yra vieta, kurioje skelbiami ir saugomi konteinerių vaizdai. Registras gali būti nuotolinis arba vietoje. Jis gali būti viešas, todėl kiekvienas gali juo naudotis arba privatus, skirtas tik organizacijai ar vartotojų rinkiniui. „Docker“ registre pateikiamas bendrų API rinkinys, leidžiantis vartotojams kurti, skelbti, ieškoti, atsisiųsti ir tvarkyti sudėtinius rodinius.
  • „Docker Hub“. „Docker Hub“ yra viešas, debesų pagrindu sukurtas konteinerių registras, kurį tvarko „Docker“. „Docker Hub“ teikia atvaizdų atradimo, platinimo ir bendradarbiavimo darbo eigos palaikymą. Be to, „Docker Hub“ turi oficialių vaizdų rinkinį, kurį patvirtina „Docker“. Tai žinomų programinės įrangos leidėjų, tokių kaip „Canonical“, „Red Hat“ ir „MongoDB“, vaizdai. Šiuos oficialius vaizdus galite naudoti kaip pagrindą kurdami savo atvaizdus ar programas.

3 paveiksle pavaizduota darbo eiga, kurioje vartotojas sukuria vaizdą ir įkelia jį į registrą. Kiti vartotojai gali ištraukti vaizdą iš registro, kad pagamintų gamybinius konteinerius, ir dislokuoti juos „Docker“ pagrindiniuose kompiuteriuose, kad ir kur jie būtų.

„Docker“ konteinerių nekintamumas

Viena iš įdomiausių „Docker“ konteinerių savybių yra jų nekintamumas ir dėl to susidaręs konteinerių be pilietybės.

Kaip aprašėme ankstesniame skyriuje, sukurtas „Docker“ vaizdas nesikeičia. Veikiančiame sudėtiniame rodinyje, gautame iš paveikslėlio, yra įrašomas sluoksnis, kuris gali laikinai išsaugoti vykdymo laiko pakeitimus. Jei konteineris atliktas prieš ištrinant su dokininkas įsipareigoja, rašomo sluoksnio pakeitimai bus išsaugoti naujame paveikslėlyje, kuris skiriasi nuo ankstesnio.

Kodėl nekintamumas yra geras? Nekintami vaizdai ir konteineriai sukuria nekintamą infrastruktūrą, o nekintama infrastruktūra turi daug įdomių pranašumų, kurių negalima pasiekti naudojant tradicines sistemas. Šie privalumai apima:

  • Versijų valdymas. Reikalaudamas aiškių įsipareigojimų, generuojančių naujus vaizdus, ​​„Docker“ priverčia jus valdyti versiją. Galite sekti vienas po kito einančias vaizdo versijas; visiškai įmanoma sugrąžinti ankstesnį vaizdą (taigi ir į ankstesnį sistemos komponentą), nes ankstesni vaizdai yra saugomi ir niekada nemodifikuojami.
  • Švaresni atnaujinimai ir lengviau valdomi būsenos pakeitimai. Turėdami nekintamą infrastruktūrą, nebereikės atnaujinti serverio infrastruktūros, o tai reiškia, kad nereikia keisti konfigūracijos failų, nereikia atnaujinti programinės įrangos, nereikia atnaujinti operacinės sistemos ir pan. Kai reikia atlikti pakeitimus, paprasčiausiai padarote naujus konteinerius ir išstumiate juos, kad pakeistumėte senus. Tai yra daug diskretiškesnis ir valdomesnis būdas pakeisti būseną.
  • Sumažintas dreifas. Norėdami išvengti dreifo, galite periodiškai ir aktyviai atnaujinti visus sistemos komponentus, kad įsitikintumėte, jog jie yra naujausios versijos. Ši praktika yra daug lengvesnė naudojant talpyklas, apimančias mažesnius sistemos komponentus, nei naudojant tradicinę didelių gabaritų programinę įrangą.

„Docker“ skirtumas

„Docker“ vaizdo formatas, platus konteinerių valdymo API ir novatoriškas programinės įrangos platinimo mechanizmas padarė jį populiarią platformą, skirtą tiek kūrimo, tiek operacijų komandoms. „Docker“ atneša šias pastebimas naudas organizacijai.

  • Minimalios, deklaratyvios sistemos. Docker konteineriai yra geriausi, jei jie yra nedideli, vienkartiniai. Tai sukuria minimalaus dydžio konteinerius, kurie savo ruožtu palaiko greitą pristatymą, nuolatinę integraciją ir nuolatinį diegimą.
  • Nuspėjamos operacijos. Didžiausias sistemos operacijų galvos skausmas visada buvo iš pažiūros atsitiktinis infrastruktūros ar programų elgesys. Priversdamas jus atlikti mažesnius, lengviau valdomus atnaujinimus ir pateikdamas mechanizmą, kad sumažėtų sistemos dreifas, „Docker“ padeda kurti labiau nuspėjamas sistemas. Pašalinus dreifus, jūs esate tikri, kad programinė įranga visada elgsis identiškai, nesvarbu, kiek kartų ją įdiegsite.
  • Platus programinės įrangos pakartotinis naudojimas. „Docker“ konteineriuose pakartotinai naudojami kitų vaizdų sluoksniai, o tai natūraliai skatina pakartotinį programinės įrangos naudojimą. Dalijimasis „Docker“ vaizdais per registrus yra dar vienas puikus komponentų pakartotinio naudojimo pavyzdys.
  • Tikras kelių debesų perkeliamumas. „Docker“ įgalina tikrą platformos nepriklausomybę, leisdama konteineriams laisvai judėti tarp skirtingų debesų platformų, vietinių infrastruktūrų ir kūrimo darbo vietų.

„Docker“ jau keičia organizacijų sistemų kūrimo ir paslaugų teikimo būdą. Tai pradeda pertvarkyti mūsų mąstymą apie programinės įrangos projektavimą ir programinės įrangos pristatymo ekonomiką. Prieš iš tikrųjų įsigalėdami šie pakeitimai, organizacijos turi geriau suprasti, kaip valdyti „Docker“ aplinkos saugą ir politiką. Bet tai yra kito straipsnio tema.

Chenxi Wangas yra konteinerių saugumo firmos „Twistlock“ vyriausiasis strategijos pareigūnas.

Naujųjų technologijų forumas suteikia galimybę tyrinėti ir aptarti besiformuojančios įmonės technologijas beprecedentiame gylyje. Atranka yra subjektyvi, atsižvelgiant į mūsų pasirinktas technologijas, kurios, mūsų manymu, yra svarbios ir labiausiai domina skaitytojus. nepriima rinkodaros užtikrinimo priemonės paskelbimui ir pasilieka teisę redaguoti visą pateiktą turinį. Visus klausimus siųskite adresu [email protected].

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