Programiranje

Gručevanje z Docker Swarmom

Ta vadnica razvijalce Jave predstavlja v programu Docker Swarm. Izvedeli boste, zakaj je toliko trgovin v podjetjih sprejelo razvoj, ki ga upravlja Docker, in zakaj je združevanje v skupine pomembna tehnika za delo z Dockerjevimi vsebniki. Izvedeli boste tudi, kako se primerjata dve priljubljeni tehnologiji združevanja Docker - Amazon ECS in Docker Swarm, in dobili hiter vodnik za izbiro prave rešitve za vašo trgovino ali projekt. Vadnica se zaključi s praktičnim prikazom uporabe Docker Swarma za razvoj in upravljanje grozda podjetja z dvema vozliščema.

Preberite zdaj: Razvoj z vsebnikom, ki ga upravlja Docker

Preden se potopite v Docker Swarm, je dobro, da se seznanite z razvojem, ki ga upravlja zabojnik, in osnovami Dockerja. Spodaj je pregled, za podrobnejšo razpravo pa glejte moj uvod v Docker. Razvijalci, ki poznajo te osnove, bi morali preskočiti na naslednji razdelek.

Kaj je s Dockerjem?

Docker je odprta platforma za gradnjo, pošiljanje in zagon distribuiranih aplikacij. Dockerizovane aplikacije se lahko lokalno izvajajo na računalniku razvijalca in jih je mogoče razviti v proizvodnjo prek infrastrukture v oblaku. Docker je primeren za hiter razvoj in omogoča nenehno integracijo in neprekinjeno uvajanje, tako kot skoraj nobena druga tehnologija. Zaradi teh funkcij gre za platformo, ki bi jo moral znati uporabljati vsak razvijalec.

Bistveno je razumeti, da je Docker a kontejnerizacija tehnologija, ne a virtualizacija tehnologija. Medtem ko navidezni stroj vsebuje celoten operacijski sistem in ga upravlja težki postopek, imenovan hipervizor, je vsebnik zasnovan tako, da je zelo lahek in samostojen. Vsak strežnik zažene demonski proces, imenovan Dockerjev mehanizem, ki zažene vsebnike in pretvori klice operacijskega sistema znotraj vsebnika v izvorne klice gostiteljskega operacijskega sistema. Vsebnik, ki je analogen navideznemu računalniku, le veliko manjši, gosti vašo aplikacijo, izvajalno okolje in operacijski sistem brez povezave. Zabojniki se običajno izvajajo na navideznih strojih. Medtem ko lahko navidezni stroj zažene nekaj minut, zabojnik pa lahko to stori v nekaj sekundah.

Slika 1 prikazuje razliko med vsebnikom in navideznim strojem.

Docker posode so samostojne, kar pomeni, da vključujejo vse, kar potrebujejo za zagon vaše aplikacije. Na primer, za spletno aplikacijo, ki se izvaja v programu Tomcat, bi vsebnik vključeval:

  • Datoteka WAR
  • Tomcat
  • JVM
  • Osnovni operacijski sistem

Slika 2 prikazuje arhitekturo spletne aplikacije znotraj Dockerjevega vsebnika.

V primeru Dockerja vsak navidezni stroj zažene demonski postopek, imenovan Docker motor. Zgradite svojo aplikacijo, na primer datoteko WAR, in nato ustvarite ustrezno Dockerfile. Dockerfile je besedilna datoteka, ki opisuje, kako zgraditi Slika Dockerja, ki je binarna datoteka, ki vsebuje vse potrebno za zagon aplikacije. Kot primer lahko zgradite datoteko Docker iz osnovne slike Tomcat, ki vsebuje osnovni OS Linux, izvajalno okolje Java in Tomcat. Potem ko je Dockerju naročil, naj kopira datoteko WAR v Tomcatov imenik webapps, bo datoteka Docker zbrana v sliko Dockerja, ki jo sestavljajo osnovni OS, JVM, Tomcat in vaša datoteka WAR. Dockerjevo sliko lahko zaženete lokalno, vendar jo boste na koncu objavili v Repozitorij Docker, kot DockerHub.

Medtem ko je Dockerjeva slika binarna različica vašega vsebnika, se izvajalni primerek Dockerjeve slike imenuje Docker posoda. Docker posode vodi vaš Docker motor. Stroj, ki poganja vaš Docker motor, se imenuje Docker gostitelj; to je lahko vaš lokalni prenosnik ali platforma v oblaku, odvisno od obsega vaše aplikacije.

Osnove v tem razdelku so podlaga za razumevanje, zakaj je združevanje v skupine pomemben dodatek k Dockerjevemu orodju. Za več si oglejte moj uvod v Docker.

Grozdni Docker

Večina razvijalcev, ki začnejo uporabljati Docker, bo zgradil Dockerfile in ga lokalno zagnal v prenosniku. Toda razvoj, ki ga upravlja kontejner, je več kot lokalno izvajanje posameznih vsebnikov Docker. Dockerjeva velesila je njegova sposobnost dinamičnega spreminjanja posod gor ali dol. V proizvodnji to pomeni zagon Dockerja v gruči na številnih strojih ali navideznih strojih.

Na voljo so različne tehnologije združevanja Docker, najbolj priljubljeni pa sta Amazon EC2 Container Service (ECS) in Docker Swarm.

Amazon ECS

Amazonova tehnologija združevanja Docker uporablja Amazon Web Services (AWS) za ustvarjanje grozda navideznih strojev, ki lahko poganjajo Dockerjeve vsebnike. Gručo ECS sestavljajo upravljani Primerki ECS, ki so primerki EC2 z Dockerjevim motorjem in agentom ECS. ECS uporablja skupino za samodejno spreminjanje obsega za razširitev in krčenje števila primerkov na podlagi pravilnikov CloudWatch. Če je na primer povprečna poraba CPU primerkov ECS previsoka, lahko od ECS zahtevate, da zažene več primerkov, do največjega števila primerkov, določenih v skupini za samodejno spreminjanje skale.

Docker kontejnerji upravlja ECS storitev in konfiguriran glede na količino računalniške zmogljivosti (CPU) in RAM-a, ki jo mora vsebnik zagnati. Storitev ECS ima povezan elastični izravnalnik obremenitve (ELB). Ko zažene in zaustavi Dockerjeve zabojnike, storitev ECS te zabojnike registrira in odjavi z ELB. Ko nastavite pravila za svoj grozd, Amazon ECS zagotavlja, da imate zagnano želeno število vsebnikov in da so vsi ti vsebniki dostopni prek ELB. Slika 3 prikazuje pogled na sistem ECS na visoki ravni.

Pomembno je razlikovati med ECS primerov in naloge. Grozd ECS upravlja vaše primerke ECS, ki so posebni primerki EC2, ki se izvajajo v skupini za samodejno spreminjanje skale. Storitev ECS upravlja naloge, ki lahko vsebujejo enega ali več vsebnikov Docker in se izvajajo v gruči. ELB sedi pred primerki ECS, ki izvajajo vaše Dockerjeve vsebnike in razporejajo tovor na vaše Dockerjeve vsebnike. Povezava med nalogami ECS in Dockerjevimi vsebniki je v tem, da definicija naloge pove službi ECS, katere Dockerjeve vsebnike naj zažene in konfiguracijo teh vsebnikov. Storitev ECS zažene nalogo, ki zažene vsebnike Docker.

Oglejte si moj uvod v Amazon ECS na VMTurbo.com.

Docker Swarm

Dockerjeva rojna tehnologija združevanja v gruče, Docker Swarm, omogoča zagon več Dockerjevih vsebnikov v gruči navideznih strojev. Docker Swarm opredeljuje a vodja vsebnik, ki deluje na navideznem računalniku, ki upravlja okolje, razporedi vsebnike različnim agentom in poroča o stanju vsebnika in informacijah o uvajanju za gručo.

Pri zagonu Docker Swarma je upravitelj glavni vmesnik Dockerja. Agenti so "docker stroji", ki se izvajajo na navideznih strojih, ki se registrirajo pri upravitelju in zaženejo Dockerjeve vsebnike. Ko odjemalec upravitelju pošlje zahtevo za zagon vsebnika, upravitelj poišče razpoložljivega agenta za njegovo zagon. Uporablja najmanj uporabljen algoritem, da zagotovi, da bo agent, ki izvaja najmanjše število vsebnikov, zagnal novo zahtevani vsebnik. Na sliki 4 je prikazan vzorec konfiguracije Docker Swarm, ki ga boste razvili v naslednjem poglavju.

Proces upravitelja pozna vse aktivne agente in vsebnike, ki se izvajajo na teh agentih. Ko se navidezni stroji agenta zaženejo, se registrirajo pri upravitelju in so nato na voljo za zagon vsebnikov Docker. Primer na sliki 4 ima dva posrednika (Agent1 in Agent2), ki sta registrirana pri upravitelju. Vsak agent izvaja dva vsebnika Nginx.

Docker Swarm proti Amazon ECS

V tem članku je predstavljen Docker Swarm, vendar je koristno primerjati tehnologije zabojnikov. Medtem ko Amazon ECS ponuja dobro razvito rešitev na ključ, vam Docker Swarm omogoča svobodo konfiguriranja več lastne infrastrukture. Kot primer Amazon ECS upravlja tako zabojnike kot izravnalnike obremenitve, medtem ko bi v Docker Swarmu konfigurirali rešitev za uravnoteženje obremenitve, kot je Cisco LocalDirector, F5 BigIp ali programski postopek Apache ali Nginx.

Če svojo aplikacijo že izvajate v AWS, potem ECS olajša zagon in upravljanje vsebnikov Dockerja kot zunanja rešitev. Kot razvijalec AWS verjetno že uporabljate skupine za samodejno spreminjanje skale, ELB-je, navidezne zasebne oblake (VPC), vloge in pravilnike za upravljanje identitete in dostopa (IAM) itd. ECS se dobro integrira z vsemi, zato je to prava pot. Če pa ne uporabljate AWS, je tesna integracija Docker Swarma z orodji Docker odlična izbira.

AWS in Docker Swarm v hibridnem oblaku

Spletne storitve Amazon je mogoče konfigurirati za zelo visoko razpoložljivost, razširljivost in zmogljivost, zato verjetno streže 25% vsega internetnega prometa, vključno z obsežno infrastrukturo storitev Netflix. V zadnjem času pa je prišlo do spodbujanja k hibridnim oblačnim oblakom. A hibridni oblak je oblak, v katerem del aplikacije ali včasih celotna kopija teče v javnem oblaku, kot je AWS, del pa v zasebnem oblaku. V tem primeru je priljubljena možnost zagnati OpenStack v zasebnem podatkovnem centru.

Hibridni oblak je varna strategija za podjetje, ki prenaša nekatere ali vse operacije v oblak, vendar mora iti počasi in pridobiti zaupanje v javne oblake. Ko izberete možnost hibridnega oblaka, morate na podlagi osnovnih tehnologij v oblaku ustvariti abstrakcijski sloj, kar pomeni, da lahko v Docker Swarm, ki se izvaja na OpenStacku v svojem podatkovnem centru, enako enostavno kot v ECS, ki deluje na AWS. . Orodja, kot sta Chef in Lutka, vam lahko pomagajo tako, da vam omogočajo, da abstraktno definirate svoja okolja in jim dodelite, da obravnavajo številne razlike med različnimi okolji.

Uvod v Docker Swarm

V prejšnjem razdelku ste videli vzorčno arhitekturo gruče Docker Swarm z dvema vozliščema. Zdaj boste to gručo razvili z uporabo dveh primerkov vsebnika Nginx Docker. Nginx je priljubljen spletni strežnik, ki je javno dostopen kot Dockerjeva slika na DockerHubu. Ker je ta članek osredotočen na Docker Swarm, sem želel uporabiti Dockerjev vsebnik, ki ga je hitro in enostavno zagnati ter enostavno preizkusiti. Prosto lahko uporabite poljuben vsebnik Dockerja, vendar sem za ilustracijo za ta primer izbral Nginx.

Moj uvod v Docker vključuje vodnik za nastavitev Dockerja v vašem razvojnem okolju. Če ste namestili in nastavili orodje Docker Toolbox, vključuje vse, kar potrebujete za zagon programa Docker Swarm. Za nadaljnja navodila za namestitev glejte uradno dokumentacijo Dockerja.

Docker Swarm v ukazni vrstici

Če ste že uporabljali Docker, potem uporabljate docker ukazna vrstica za zagon in zaustavitev vsebnikov. Ko uporabljate Docker Swarm, boste zamenjali docker za priključni stroj. Docker Machine je v dokumentaciji Docker opredeljen na naslednji način:

Docker Machine je orodje, ki vam omogoča namestitev Docker Engine na navidezne gostitelje in upravljanje gostiteljev z ukazi docker-machine. Machine lahko uporabite za ustvarjanje Dockerjevih gostiteljev na vašem lokalnem računalniku Mac ali Windows, v omrežju vašega podjetja, v vašem podatkovnem centru ali na ponudnikih v oblaku, kot sta AWS ali Digital Ocean. Z uporabo ukazov docker-machine lahko zaženete, pregledate, ustavite in znova zaženete upravljani gostitelj, nadgradite odjemalca in demona Dockerja in konfigurirate odjemalca Docker, da se pogovarja z vašim gostiteljem.

Če ste namestili Docker, vaša namestitev že vključuje Docker Machine. Če želite začeti z Docker Swarm, zaženite Docker in odprite terminal v računalniku. Izvedite naslednje priključni stroj ls ukaz za seznam vseh VM-jev na vašem lokalnem računalniku:

 $ docker-machine ls IME AKTIVNI VOZNIK DRŽAVNI URL URL SWARM privzeto * virtualbox Zagon tcp: //192.168.99.100: 2376 

Če ste Docker zagnali samo iz lokalnega računalnika, morate imeti privzeti navidezni stroj Docker, ki deluje z naslovom IP 192.168.99.100. Če želite prihraniti vire na svojem lokalnem računalniku, lahko zaustavite ta navidezni stroj z izvajanjem: docker-machine stop privzeto.

Ustvari roj

Dockerjev roj je sestavljen iz dveh ali navideznih strojev, ki poganjajo primerke Docker. Za to predstavitev bomo ustvarili tri nove navidezne računalnike: manager, agent1 in agent2. Ustvarite svoje virtualne stroje z uporabo docker-machine create ukaz:

$ docker-machine create -d manager virtualbox $ docker-machine create -d agent virtualbox1 $ docker-machine create -d agent virtualbox2 

The docker-machine create ukaz ustvari nov "stroj". Mimo -d argument vam omogoča, da določite gonilnik, ki ga želite uporabiti za izdelavo naprave. Zagon lokalno, to bi moralo biti virtualbox. Prvi ustvarjeni stroj je vodja, ki bo gostil postopek upravitelja. Zadnja dva stroja, agent1 in agent2, so stroji agentov, ki bodo gostili procese agentov.

Na tej točki ste ustvarili navidezne stroje, vendar niste ustvarili dejanskega upravitelja ali agentov Swarm. Za ogled navideznih strojev in njihovega stanja izvedite priključni stroj ls ukaz:

 $ docker-machine ls IME AKTIVNI DRIVER DRŽAVNI URL SWARM DOCKER ERRORS agent1 - virtualbox Running tcp: //192.168.99.101: 2376 v1.11.1 agent2 - virtualbox Running tcp: //192.168.99.102: 2376 v1.11.1 privzeto - virtualbox Ustavljeno Neznano manager * virtualbox Izvaja se tcp: //192.168.99.100: 2376 v1.11.1 
$config[zx-auto] not found$config[zx-overlay] not found