Programavimas

Grupavimas su „Docker Swarm“

Ši pamoka supažindina „Java“ kūrėjus su „Docker Swarm“. Sužinosite, kodėl tiek daug įmonių parduotuvių priėmė konteinerių valdomą plėtrą per „Docker“ ir kodėl grupavimas yra svarbi darbo su „Docker“ konteineriais technika. Taip pat sužinosite, kaip palyginamos dvi populiarios „Docker“ grupavimo technologijos - „Amazon ECS“ ir „Docker Swarm“, ir gausite greitą vadovą, kaip pasirinkti tinkamą savo parduotuvės ar projekto sprendimą. Pamoka baigiama praktiniu „Docker Swarm“ naudojimu kuriant ir valdant dviejų mazgų įmonės klasterį.

Skaitykite dabar: Konteinerių valdoma plėtra su „Docker“

Prieš neriant į „Docker Swarm“, verta išmanyti konteinerių valdomą plėtrą ir „Docker“ pagrindus. Toliau pateikiama apžvalga, tačiau išsamesnę diskusiją rasite mano įžangoje į „Docker“. Kūrėjai, susipažinę su šiais pagrindais, turėtų pereiti į kitą skyrių.

Koks sandoris su „Docker“?

„Docker“ yra atvira platforma, skirta kurti, gabenti ir vykdyti paskirstytas programas. „Dockerized“ programos gali veikti vietoje kūrėjo mašinoje ir jas galima naudoti gamyboje naudojant debesų infrastruktūrą. „Docker“ gali sparčiai tobulėti ir įgalina nuolatinę integraciją ir nuolatinį diegimą, kaip beveik jokia kita technologija. Dėl šių funkcijų tai yra platforma, kuria kiekvienas kūrėjas turėtų mokėti naudotis.

Būtina suprasti, kad Dockeris yra a konteinerizavimas technologijos, o ne a Virtualizacija technologija. Nors virtualioje mašinoje yra visa operacinė sistema ir ją valdo sunkiasvoris procesas, vadinamas hipervizoriumi, konteineris sukurtas taip, kad būtų labai lengvas ir savarankiškas. Kiekvienas serveris vykdo „daemon“ procesą, vadinamą „Docker“ varikliu, kuris paleidžia konteinerius ir konteinerio viduje esančius operacinės sistemos skambučius verčia į pagrindinius pagrindinės operacinės sistemos skambučius. Talpykloje, kuri yra analogiška virtualiajai mašinai, tik daug mažesnei, yra jūsų programa, vykdymo trukmės aplinka ir „barebones“ operacinė sistema. Konteineriai paprastai veikia virtualiose mašinose. Virtuali mašina gali užtrukti kelias minutes, o konteineris - per kelias sekundes.

1 paveiksle parodytas skirtumas tarp konteinerio ir virtualios mašinos.

„Docker“ talpyklos yra atskiros, o tai reiškia, kad jose yra viskas, ko reikia jūsų programai paleisti. Pavyzdžiui, žiniatinklio programai, veikiančiai „Tomcat“, sudėtiniame rodinyje būtų:

  • WAR failas
  • Tomcat
  • JVM
  • Pagrindinė operacinė sistema

2 paveiksle parodyta žiniatinklio programos architektūra „Docker“ talpykloje.

„Docker“ atveju kiekviena virtuali mašina vykdo „daemon“ procesą, vadinamą „Docker“ variklis. Kuriate savo programą, pvz., Savo WAR failą, tada sukuriate atitinkamą Dockerfile. „Dockerfile“ yra tekstinis failas, kuriame aprašoma, kaip sukurti „Docker“ vaizdas, kuris yra dvejetainis failas, kuriame yra viskas, ko reikia programai paleisti. Kaip pavyzdį galite sukurti „Dockerfile“ iš pagrindinio „Tomcat“ vaizdo, kuriame yra pagrindinė „Linux“ OS, „Java“ vykdymo trukmė ir „Tomcat“. Nurodžius „Docker“ nukopijuoti WAR failą į „Tomcat“ žiniatinklio aplankų katalogą, „Dockerfile“ bus sukompiliuotas į „Docker“ vaizdą, susidedantį iš pagrindinės OS, JVM, Tomcat ir jūsų WAR failo. Galite paleisti „Docker“ vaizdą vietoje, bet galiausiai jį paskelbsite „Docker“ saugykla, kaip ir „DockerHub“.

Nors „Docker Image“ yra dvejetainė jūsų talpyklos versija, „Docker Image“ vykdymo laiko egzempliorius vadinamas Docker konteineris. „Docker“ konteinerius valdo jūsų „Docker“ variklis. Mašina, naudojanti jūsų „Docker“ variklį, vadinama „Docker“ vedėjas; tai gali būti jūsų vietinis nešiojamas kompiuteris arba debesies platforma, atsižvelgiant į jūsų programos mastą.

Šio skyriaus pagrindai suteikia pagrindą suprasti, kodėl grupavimas yra svarbus jūsų „Docker“ įrankių rinkinio priedas. Daugiau informacijos rasite mano „Docker“ įžangoje.

„Docker“ grupavimas

Dauguma kūrėjų, pradedančių naudoti „Docker“, sukurs „Dockerfile“ ir paleis jį vietoje nešiojamuoju kompiuteriu. Tačiau konteinerių valdymas yra daugiau nei atskirų „Docker“ konteinerių valdymas vietoje. „Docker“ supervalstybė yra jos galimybė dinamiškai keisti konteinerius aukštyn arba žemyn. Gamyboje tai reiškia „Docker“ paleidimą grupėje daugybės mašinų ar virtualių mašinų.

Galimos įvairios „Docker“ grupavimo technologijos, tačiau dvi populiariausios yra „Amazon EC2 Container Service“ (ECS) ir „Docker Swarm“.

„Amazon ECS“

„Amazon“ grupavimo technologija „Docker“ pasitelkia „Amazon Web Services“ (AWS) sukurti virtualių mašinų grupę, galinčią valdyti „Docker“ konteinerius. ECS klasteris susideda iš valdomo ECS atvejai, kurie yra EC2 egzemplioriai su „Docker“ varikliu ir ECS agentu. ECS naudoja automatinio mastelio keitimo grupę, kad išplėstų ir sudarytų sutarčių skaičių pagal „CloudWatch“ politiką. Pavyzdžiui, kai ECS egzempliorių vidutinis procesoriaus naudojimas yra per didelis, galite paprašyti ECS paleisti daugiau egzempliorių, neviršijant maksimalaus egzempliorių skaičiaus, apibrėžto automatinio mastelio grupėje.

„Docker“ konteinerius tvarko ECS paslauga ir sukonfigūruotas pagal skaičiavimo talpos (procesoriaus) ir RAM kiekį, kurį reikia paleisti konteineriui. ECS tarnyba turi susietą „Elastic Load Balancer“ (ELB). Paleidžiant ir sustabdant „Docker“ konteinerius, ECS tarnyba užregistruoja ir išregistruoja tuos konteinerius ELB. Nustačius klasterio taisykles, „Amazon ECS“ užtikrina, kad veikia norimas konteinerių skaičius, ir visus tuos konteinerius galite pasiekti per ELB. 3 paveiksle parodytas aukšto lygio „Amazon ECS“ vaizdas.

Svarbu atskirti ECS atvejų ir užduotys. ECS klasteris valdo jūsų ECS egzempliorius, kurie yra specialūs EC2 egzemplioriai, vykdomi automatinio mastelio grupėje. ECS tarnyba valdo užduotis, kuriose gali būti vienas ar daugiau „Docker“ konteinerių ir kurios vykdomos klasteryje. ELB sėdi priešais ECS egzempliorius, kurie veikia jūsų „Docker“ konteinerius ir paskirsto krovinį į jūsų „Docker“ konteinerius. ECS užduočių ir „Docker“ talpyklų ryšys yra tas, kad užduoties apibrėžimas ECS tarnybai nurodo, kuriuos „Docker“ konteinerius vykdyti, ir tų konteinerių konfigūraciją. ECS tarnyba vykdo užduotį, kuria paleidžiami „Docker“ konteineriai.

Žr. Mano įvadą į „Amazon ECS“ svetainėje VMTurbo.com.

Dockerio būrys

Gimtoji „Docker“ grupavimo technologija „Docker Swarm“ leidžia paleisti kelis „Docker“ konteinerius per virtualių mašinų grupę. „Docker Swarm“ apibrėžia a vadybininkas konteineris, kuris veikia virtualioje mašinoje, kuri tvarko aplinką, talpina konteinerius prie įvairių agentų ir praneša apie grupės sudėtinio rodinio būseną ir diegimo informaciją.

Vykdant „Docker Swarm“ valdytojas yra pagrindinė „Docker“ sąsaja. Agentai yra „dokų mašinos“, veikiančios virtualiose mašinose, kurios registruojasi pas valdytoją ir valdo „Docker“ konteinerius. Kai klientas siunčia vadybininkui prašymą pradėti sudėtinį rodinį, jis suranda laisvą agentą jam paleisti. Jis naudoja mažiausiai naudojamą algoritmą, kad užtikrintų, jog agentas, valdantis mažiausiai konteinerių, paleis naujai prašomą konteinerį. 4 paveiksle parodyta pavyzdinė „Docker Swarm“ konfigūracija, kurią sukursite kitame skyriuje.

Valdytojo procesas žino apie visus aktyvius agentus ir juose veikiančius konteinerius. Paleidus agento virtualias mašinas, jie užsiregistruoja pas valdytoją ir gali paleisti „Docker“ konteinerius. 4 paveiksle pateiktame pavyzdyje yra du agentai (Agent1 ir Agent2), kurie yra užregistruoti pas valdytoją. Kiekvienas agentas naudoja du „Nginx“ konteinerius.

„Docker Swarm“ ir „Amazon ECS“

Šiame straipsnyje yra „Docker Swarm“, tačiau naudinga palyginti konteinerių technologijas. Nors „Amazon ECS“ siūlo gerai parengtą „raktų“ sprendimą, „Docker Swarm“ suteikia jums laisvę konfigūruoti daugiau savo infrastruktūros. Pavyzdžiui, „Amazon ECS“ valdo ir konteinerius, ir krovinių balanserius, o programoje „Docker Swarm“ sukonfigūruosite apkrovos balansavimo sprendimą, pvz., „Cisco LocalDirector“, „F5 BigIp“ arba „Apache“ arba „Nginx“ programinės įrangos procesą.

Jei jau naudojate savo programą AWS, tada ECS palengvina „Docker“ sudėtinių rodinių valdymą ir valdymą nei išorinis sprendimas. Kaip AWS kūrėjas, jūs tikriausiai jau naudojate automatinio keitimo grupes, ELB, virtualių privačių debesų (VPC), tapatybės ir prieigos valdymo (IAM) vaidmenis ir politiką ir pan. ECS gerai integruojasi su visais, todėl tai yra kelias. Bet jei jūs neveikiate AWS, tai glaudus „Docker Swarm“ integravimas su „Docker“ įrankiais yra puikus pasirinkimas.

„AWS“ ir „Docker Swarm“ hibridiniame debesyje

„Amazon Web Services“ gali būti sukonfigūruotas labai prieinamam, keičiamam ir efektyviam, todėl tikriausiai todėl ji aptarnauja 25% viso interneto srauto, įskaitant masiškai keičiamą „Netflix“ paslaugų infrastruktūrą. Tačiau pastaruoju metu stengiamasi pasiekti hibridinę debesų aplinką. A hibridinis debesis yra debesis, kuriame dalis programos arba kartais visa jos kopija veikia viešame debesyje, pvz., AWS, o dalis - privačiame debesyje. Šiuo atveju populiarus variantas yra paleisti „OpenStack“ privačiame duomenų centre.

Hibridinis debesis yra saugi strategija įmonei, kuri dalį ar visas operacijas perkelia į debesį, tačiau turi eiti lėtai ir pasitikėti viešaisiais debesimis. Kai pasirenkate hibridinę debesies parinktį, virš pagrindinių debesų technologijų turite sukurti abstrakcijos sluoksnį, o tai reiškia, kad jūs taip pat lengvai galite įdiegti „Docker Swarm“, veikiantį „OpenStack“ savo duomenų centre, kaip ir ECS, veikiančiame AWS . Įrankiai, tokie kaip „Chef“ ir „Lėlė“, gali padėti, leisdami abstrakčiai apibrėžti savo aplinką, pavesdami jas tvarkyti daugelį skirtingų aplinkų skirtumų.

Darbo su „Docker Swarm“ pradžia

Ankstesniame skyriuje pamatėte dviejų mazgų „Docker Swarm“ sankaupos architektūros pavyzdį. Dabar sukursite tą klasterį naudodami du „Nginx Docker“ konteinerių egzempliorius. „Nginx“ yra populiarus interneto serveris, viešai prieinamas kaip „Docker“ vaizdas „DockerHub“. Kadangi šis straipsnis skirtas „Docker Swarm“, norėjau naudoti „Docker“ talpyklą, kurią greitai ir lengvai paleisti bei nesudėtinga išbandyti. Galite laisvai naudoti bet kokį norimą „Docker“ konteinerį, tačiau iliustraciniams tikslams šiame pavyzdyje pasirinkau „Nginx“.

Mano įvadas į „Docker“ apima „Docker“ nustatymo jūsų kūrimo aplinkoje vadovą. Jei įdiegėte ir sukonfigūravote „Docker Toolbox“, joje yra viskas, ko reikia norint paleisti „Docker Swarm“. Norėdami sužinoti daugiau sąrankos instrukcijų, žiūrėkite oficialius „Docker“ dokumentus.

„Docker Swarm“ komandinėje eilutėje

Jei anksčiau naudojote „Docker“, esate gerai susipažinę su dokininkas komandinė eilutė paleisti ir sustabdyti konteinerius. Naudodamiesi „Docker Swarm“ prekiausite dokininkas dėl dokininkas-mašina. „Docker Machine“ „Docker“ dokumentuose apibrėžiamas taip:

„Docker Machine“ yra įrankis, leidžiantis įdiegti „Docker Engine“ virtualiuose pagrindiniuose kompiuteriuose ir valdyti kompiuterius naudojant „docker-machine“ komandas. Galite naudoti „Machine“, kad sukurtumėte „Docker“ pagrindinius kompiuterius vietiniame „Mac“ ar „Windows“ laukelyje, įmonės tinkle, duomenų centre ar debesų tiekėjuose, tokiuose kaip AWS ar „Digital Ocean“. Naudodami „Docker-machine“ komandas galite paleisti, patikrinti, sustabdyti ir iš naujo paleisti valdomą pagrindinį kompiuterį, atnaujinti „Docker“ klientą ir „daemon“ bei sukonfigūruoti „Docker“ klientą kalbėti su jūsų kompiuteriu.

Jei įdiegėte „Docker“, jūsų diegime jau yra „Docker Machine“. Norėdami pradėti naudotis „Docker Swarm“, paleiskite „Docker“ ir atidarykite kompiuterio terminalą. Atlikite šiuos veiksmus dokininkas-mašina ls komanda išvardyti visus VM savo vietiniame kompiuteryje:

 $ docker-machine ls PAVADINIMAS AKTYVUS VAIRUOTOJO VALSTYBĖS URL „SWARM“ numatytasis * „virtualbox“ veikia TCP: //192.168.99.100: 2376 

Jei „Docker“ paleidote tik iš savo vietinio kompiuterio, turėtumėte turėti numatytąją „Docker“ virtualią mašiną, veikiančią su IP adresu 192.168.99.100. Norėdami taupyti vietinės mašinos išteklius, galite sustabdyti šią virtualią mašiną vykdydami: numatytasis dokininko-mašinos sustabdymas.

Sukurti būrį

„Docker“ būrį sudaro dvi arba virtualios mašinos, naudojančios „Docker“ egzempliorius. Šiai demonstracijai sukursime tris naujas virtualias mašinas: vadybininkas, agentas1 ir agentas2. Sukurkite savo virtualias mašinas naudodami docker-machine sukurti komanda:

$ docker-machine create -d virtualbox manager $ docker-machine create -d virtualbox agent1 $ docker-machine create -d virtualbox agent2 

dokininkas-mašina sukurti komanda sukuria naują „mašiną“. Perduoti jį -d Argumentas leidžia nurodyti tvarkyklę, kurią naudosite kurdami mašiną. Bėgti vietoje, taip turėtų būti „virtualbox“. Pirmoji sukurta mašina yra vadybininkas, kuriame vyks vadybininko procesas. Paskutinės dvi mašinos, agentas1 ir agentas2yra agentų mašinos, kuriose bus vykdomi agentų procesai.

Šiuo metu sukūrėte virtualias mašinas, bet nesukūrėte tikrojo „Swarm“ tvarkyklės ar agentų. Norėdami peržiūrėti virtualias mašinas ir jų būseną, vykdykite dokininkas-mašina ls komanda:

 $ docker-machine ls PAVADINIMAS AKTYVUS DRIVERIO VALSTYBĖS URL „SWARM DOCKER“ KLAIDOS agentas1 - „virtualbox“ veikia TCP: //192.168.99.101: 2376 v1.11.1 agent2 - „virtualbox“ Veikia TCP: //192.168.99.102: 2376 v1.11.1 numatytasis nustatymas - „virtualbox“ sustabdytas nežinomas vadybininkas * virtualbox Veikia tcp: //192.168.99.100: 2376 v1.11.1