Programavimas

Kas yra „Docker“? Konteinerių revoliucijos kibirkštis

„Docker“ yra programinės įrangos platforma, skirta kurti programas remiantis konteineriai - mažos ir lengvos vykdymo aplinkos, kurios naudojasi operacinės sistemos branduoliu bendrai, bet kitaip veikia atskirai viena nuo kitos. Nors konteineriai kaip koncepcija egzistavo jau kurį laiką, 2013 m. Pradėtas atvirojo kodo projektas „Docker“ padėjo populiarinti technologijas ir padėjo skatinti tendenciją konteinerizavimas ir mikropaslaugos programinės įrangos kūrime, kuris buvo žinomas kaip debesų kūrimas.

Kas yra konteineriai?

Vienas iš šiuolaikinės programinės įrangos kūrimo tikslų yra išlaikyti to paties pagrindinio kompiuterio ar klasterio programas izoliuotas viena nuo kitos, kad jos nepagrįstai netrukdytų viena kitai veikti ar prižiūrėti. Tai gali būti sunku dėl paketų, bibliotekų ir kitų programinės įrangos komponentų, reikalingų jiems paleisti. Vienas šios problemos sprendimas buvo virtualios mašinos, kurios ta pačia aparatine įranga palaiko visiškai atskiras programas ir iki minimumo sumažina programinės įrangos komponentų konfliktus ir konkurenciją dėl aparatinės įrangos išteklių. Tačiau virtualios mašinos yra didelių gabaritų - kiekvienai jų reikia savo OS, todėl paprastai jos yra gigabaitų dydžio, jas sunku prižiūrėti ir atnaujinti.

Konteineriai, priešingai, išskirkite programų vykdymo aplinkas viena nuo kitos, tačiau bendrinkite pagrindinį OS branduolį. Jie paprastai matuojami megabaitais, naudoja daug mažiau išteklių nei VM ir paleidžiami beveik iš karto. Jie gali būti daug tankiau supakuoti ant tos pačios aparatūros ir sukti aukštyn ir žemyn masiškai kur kas mažiau pastangų ir pridėtinių išlaidų. Konteineriai yra labai efektyvus ir labai kruopštus mechanizmas, leidžiantis programinės įrangos komponentus sujungti į taikomąsias ir paslaugų paketus, reikalingus šiuolaikinėje įmonėje, ir išlaikyti tuos programinės įrangos komponentus atnaujintus ir prižiūrimus.

Dokeris

Kas yra „Docker“?

„Docker“ yra atviro kodo projektas, leidžiantis lengvai kurti konteinerius ir konteinerių programas. Iš pradžių sukurtas „Linux“, „Docker“ dabar veikia ir „Windows“ bei „MacOS“. Norėdami suprasti, kaip veikia „Docker“, pažvelkime į kai kuriuos komponentus, kuriuos naudotumėte kurdami „Docker“ talpinamas programas.

Dockerfile

Kiekvienas „Docker“ konteineris prasideda a Dockerfile. „Dockerfile“ yra teksto failas, parašytas lengvai suprantama sintakse, kuriame yra instrukcijos, kaip sukurti „Docker“ vaizdas (daugiau apie tai per akimirką). „Dockerfile“ nurodo operacinę sistemą, kuri bus konteinerio pagrindas, kartu su kalbomis, aplinkos kintamaisiais, failų vietomis, tinklo prievadais ir kitais reikalingais komponentais - ir, žinoma, ką iš tikrųjų veiks konteineris, kai mes jį paleisime.

Paige Niedringhaus per „ITNext“ gerai suskirstė „Dockerfile“ sintaksę.

„Docker“ vaizdas

Parašę „Dockerfile“, jūs iškviečiate „Docker“ statyti naudingumas sukurti vaizdas remiantis ta Dockerfile. Tuo tarpu „Dockerfile“ yra nurodymų rinkinys statyti kaip padaryti vaizdą, „Docker“ paveikslėlis yra nešiojamasis failas, kuriame pateikiamos specifikacijos, kuriems programinės įrangos komponentams veiks konteineris ir kaip. Kadangi „Dockerfile“ tikriausiai bus instrukcijos, kaip paimti kai kuriuos programinės įrangos paketus iš internetinių saugyklų, turėtumėte pasirūpinti, kad aiškiai nurodytumėte tinkamas versijas, nes kitaip jūsų „Dockerfile“ gali būti nenuoseklūs vaizdai, atsižvelgiant į tai, kada ji yra naudojama. Bet kai vaizdas yra sukurtas, jis yra statiškas. „Codefresh“ siūlo sužinoti, kaip sukurti vaizdą išsamiau.

Dockerio bėgimas

Dockerio paleisti Naudingumas yra komanda, kuri iš tikrųjų paleidžia konteinerį. Kiekvienas konteineris yra instancija atvaizdo. Konteineriai yra suprojektuoti kaip laikini ir laikini, tačiau juos galima sustabdyti ir paleisti iš naujo, o tai paleidžia konteinerį į tą pačią būseną, kuri buvo sustabdyta. Be to, vienu metu galima paleisti kelis to paties vaizdo sudėtinius rodinius (jei kiekvienas sudėtinis rodinys turi unikalų pavadinimą). Kodo apžvalgoje pateikiamos įvairios skirtingos programos versijos paleisti komandą, kad pajustum, kaip tai veikia.

„Docker Hub“

Nors konteinerius statyti lengva, nesusimąstykite, kad kiekvieną savo vaizdą turėsite sukurti nuo nulio. „Docker Hub“ yra „SaaS“ talpykla, skirta dalytis ir tvarkyti konteinerius, kurioje rasite oficialius „Docker“ vaizdus iš atvirojo kodo projektų ir programinės įrangos tiekėjų bei neoficialius plačiosios visuomenės vaizdus. Galite atsisiųsti sudėtinio rodinio vaizdus, ​​kuriuose yra naudingas kodas, arba įkelti savo, atvirai jais dalytis arba padaryti privačius. Jei norite, taip pat galite sukurti vietinį „Docker“ registrą. („Docker Hub“ anksčiau buvo problemų su vaizdais, kurie buvo įkeliami su įmontuotomis užpakalinėmis durimis.)

„Docker“ variklis

„Docker Engine“ yra pagrindinė „Docker“, pagrindinė kliento-serverio technologija, kuria ir tvarko konteinerius. Paprastai tariant, kai kas nors sako Dokeris paprastai ir nekalba apie įmonę ar bendrą projektą, jie turi omenyje „Docker Engine“. Siūlomos dvi skirtingos „Docker Engine“ versijos: „Docker Engine Enterprise“ ir „Docker Engine Community“.

„Docker“ bendruomenės leidimas

Dockeris išleido savo „Enterprise Edition“ 2017 m., tačiau pradinis pasiūlymas, pavadintas „Docker Community Edition“, išlieka atviro kodo ir nemokamas, o proceso metu neprarado jokių funkcijų. Vietoj to, „Enterprise Edition“, kainuojanti 1500 USD už mazgą per metus, pridėjo pažangių valdymo funkcijų, įskaitant klasterių ir vaizdų valdymo valdymą bei pažeidžiamumo stebėjimą. „BoxBoat“ tinklaraštyje aprašyti leidimų skirtumai.

Kaip Dockeris užkariavo konteinerių pasaulį

Idėja, kad tam tikrą procesą galima vykdyti tam tikru laipsniu izoliuotu nuo likusios jo operacinės aplinkos, dešimtmečius buvo įdiegta tokiose „Unix“ operacinėse sistemose kaip BSD ir „Solaris“. Originali „Linux“ konteinerių technologija „LXC“ yra OS lygio virtualizavimo metodas, skirtas paleisti kelias izoliuotas „Linux“ sistemas viename pagrindiniame kompiuteryje. LXC tapo įmanoma dėl dviejų „Linux“ funkcijų: vardų srities, apimančios sistemos išteklių rinkinį ir pateikiančios juos procesui, kad atrodytų, jog jie skirti tam procesui; ir grupes, kurios valdo sistemos išteklių, tokių kaip procesorius ir atmintis, izoliavimą ir naudojimą procesų grupei.

Konteineriai atsieja programas nuo operacinių sistemų, o tai reiškia, kad vartotojai gali turėti švarią ir minimalią „Linux“ operacinę sistemą, o visa kita paleisti viename ar daugiau izoliuotų talpyklų. Kadangi operacinė sistema yra atskirta nuo konteinerių, galite perkelti konteinerį per bet kurį „Linux“ serverį, palaikantį konteinerio vykdymo aplinką.

„Docker“ pristatė keletą reikšmingų LXC pakeitimų, kurie konteinerius paverčia nešiojamais ir lanksčiais naudoti. Naudodami „Docker“ konteinerius, galite įdėti, atkartoti, perkelti ir sukurti atsarginę darbo krūvį dar greičiau ir paprasčiau, nei tai galite padaryti naudodami virtualias mašinas. „Docker“ suteikia į debesį panašų lankstumą bet kurioje infrastruktūroje, galinčioje paleisti konteinerius. „Docker“ konteinerių vaizdų įrankiai taip pat buvo pažanga prieš LXC, leidžiant kūrėjui kurti vaizdų bibliotekas, komponuoti programas iš kelių vaizdų ir paleisti tuos konteinerius ir programas vietinėje ar nuotolinėje infrastruktūroje.

„Docker Compose“, „Docker Swarm“ ir „Kubernetes“

Dockeris taip pat palengvina elgesio koordinavimą tarp konteinerius ir taip sukonstruokite aplikacijos kaminus, sukabindami konteinerius. „Docker Compose“ sukūrė „Docker“, kad supaprastintų kelių konteinerių programų kūrimo ir testavimo procesą. Tai komandinės eilutės įrankis, primenantis „Docker“ klientą, kuris ima specialiai suformatuotą deskriptoriaus failą, kad surinktų programas iš kelių talpyklų ir kartu paleistų jas viename pagrindiniame kompiuteryje. (Norėdami sužinoti daugiau, peržiūrėkite „Docker Compose“ mokymo programą.)

Pažangesnės šio elgesio versijos - tai, kas vadinama konteinerių orkestravimas- siūlo kiti produktai, tokie kaip „Docker Swarm“ ir „Kubernetes“. Tačiau Dockeris pateikia pagrindus. Nors „Swarm“ išaugo iš „Docker“ projekto, „Kubernetes“ tapo de facto Pasirinkta dokininko orkestro platforma.

Docker privalumai

„Docker“ konteineriai suteikia galimybę kurti įmones ir verslo programas, kurias lengviau surinkti, prižiūrėti ir judėti nei įprastus analogus. 

„Docker“ konteineriai leidžia izoliuoti ir droselinti

„Docker“ konteineriuose programos yra izoliuotos ne tik viena nuo kitos, bet ir pagrindinės sistemos. Tai ne tik sukuria švaresnę programinės įrangos paketą, bet ir lengviau nusakyti, kaip tam tikra konteinerių programa naudoja sistemos išteklius - procesorių, GPU, atmintį, įvesties / išvesties tinklą, tinklą ir pan. Taip pat lengviau užtikrinti, kad duomenys ir kodas būtų laikomi atskirai. (Žr. Žemiau „Docker konteineriai yra be pilietybės ir nekintami“.)

„Docker“ konteineriai leidžia perkelti

„Docker“ konteineris veikia bet kurioje mašinoje, palaikančioje konteinerio vykdymo aplinką. Programos neprivalo būti susietos su pagrindine operacine sistema, todėl tiek programos aplinką, tiek pagrindinę operacinę aplinką galima išlaikyti švarias ir minimalias.

Pavyzdžiui, „MySQL for Linux“ konteineris veiks daugelyje bet kokių „Linux“ sistemų, palaikančių konteinerius. Visos programos priklausomybės paprastai pateikiamos tame pačiame inde.

Konteinerių programas galima lengvai perkelti iš „on-prem“ sistemų į debesų aplinką arba iš kūrėjų nešiojamųjų kompiuterių į serverius, jei tikslinė sistema palaiko „Docker“ ir bet kokius trečiųjų šalių įrankius, kurie gali būti naudojami su juo. „Kubernetes“ (žemiau žr. „Docker konteineriai palengvina orkestravimą ir mastelio keitimą“).

Paprastai „Docker“ konteinerio vaizdai turi būti kuriami konkrečiai platformai. Pavyzdžiui, „Windows“ sudėtinis rodinys nebus paleistas „Linux“ ir atvirkščiai. Anksčiau vienas būdas išvengti šio apribojimo buvo paleisti virtualią mašiną, paleidusią reikiamos operacinės sistemos egzempliorių, ir paleisti konteinerį virtualioje mašinoje.

Tačiau „Docker“ komanda nuo tada sukūrė elegantiškesnį sprendimą, vadinamąpasireiškia, leidžiančius kelių operacinių sistemų atvaizdus supakuoti į tą patį vaizdą. Manifestai vis dar laikomi eksperimentiniais, tačiau juose užsimenama, kaip konteineriai gali tapti tiek platformų, tiek įvairių aplinkų aplikacijų sprendimais. 

„Docker“ konteineriai leidžia sudėlioti

Daugumą verslo programų sudaro keli atskiri komponentai, suskirstyti į šūsnį - interneto serveris, duomenų bazė, atminties talpykla. Konteineriai leidžia šiuos kūrinius sukomponuoti į funkcinį vienetą su lengvai keičiamomis dalimis. Kiekvieną kūrinį pateikia skirtingas konteineris ir jis gali būti prižiūrimas, atnaujinamas, keičiamas ir modifikuojamas nepriklausomai nuo kitų.

Iš esmės tai yra mikroprocesinių programų dizaino modelis. Padalinus programų funkcionalumą į atskiras, savarankiškas paslaugas, mikropaslaugų modelis siūlo priešnuodį lėtiems tradiciniams kūrimo procesams ir nelanksčioms monolitinėms programoms. Lengvi ir nešiojamieji konteineriai leidžia lengviau kurti ir prižiūrėti mikroservisais pagrįstas programas.

„Docker“ konteineriai palengvina orkestravimą ir mastelio keitimą

Kadangi konteineriai yra lengvi ir nereikalauja didelių pridėtinių išlaidų, tam tikroje sistemoje jų galima paleisti daug daugiau. Tačiau konteineriai taip pat gali būti naudojami taikymo mastui išplėsti visose sistemų grupėse ir pakelti paslaugas aukštyn arba žemyn, siekiant patenkinti paklausos šuolius arba taupyti išteklius.

Daugiausia įmonės lygio įrankių, skirtų talpykloms diegti, valdyti ir keisti, versijas teikia trečiųjų šalių projektai. Tarp jų yra „Google“ „Kubernetes“ - sistema, skirta automatizuoti konteinerių išdėstymą ir mastelį, taip pat tai, kaip jie yra sujungti, subalansuoti ir valdomi. „Kubernetes“ taip pat pateikia būdų, kaip sukurti ir pakartotinai naudoti kelių talpyklų programų apibrėžimus arba „Helm diagramas“, kad sudėtingus programų paketus būtų galima kurti ir valdyti pagal poreikį.

„Docker“ taip pat turi savo įmontuotą orkestravimo sistemą „Swarm“ režimą, kuris vis dar naudojamas mažiau reikliems atvejams. Beje, „Kubernetes“ tapo numatytuoju pasirinkimu; iš tikrųjų „Kubernetes“ yra sujungta su „Docker Enterprise Edition“.

Dockerio įspėjimai

Konteineriai išsprendžia labai daug problemų, tačiau jie nėra visi vaistai. Kai kurie jų trūkumai yra dėl dizaino, o kiti yra jų dizaino šalutiniai produktai.

„Docker“ konteineriai nėra virtualios mašinos

Dažniausia konceptuali klaida, kurią žmonės daro su konteineriais, yra jų prilyginimas virtualioms mašinoms. Tačiau, kadangi konteineriuose ir virtualiose mašinose naudojami skirtingi izoliavimo mechanizmai, jie turi aiškiai skirtingus pranašumus ir trūkumus.

Virtualiosios mašinos užtikrina aukštą procesų izoliaciją, nes jos veikia savo operacinės sistemos pavyzdžiu. Ta operacinė sistema taip pat neturi būti tokia pati, kokia paleista pagrindiniame kompiuteryje. „Windows“ virtuali mašina gali veikti su „Linux“ hipervizoriumi ir atvirkščiai.

Konteineriuose, priešingai, naudojamos kontroliuojamos pagrindinės operacinės sistemos išteklių dalys; daugybė programų naudoja tą patį OS branduolį labai valdomu būdu. Dėl to konteineriuose pateikiamos programos nėra taip kruopščiai izoliuotos kaip virtualios mašinos, tačiau jos suteikia pakankamai izoliacijos daugumai darbo krūvių.

„Docker“ konteineriai neužtikrina pliko metalo greičio