Ohjelmointi

Ryhmittely Docker Swarmin kanssa

Tämä opetusohjelma esittelee Java-kehittäjät Docker Swarmille. Opit, miksi niin monet yrityskaupat ovat ottaneet käyttöön konttiohjatun kehityksen Dockerin kautta ja miksi klusterointi on tärkeä tekniikka Docker-konttien kanssa työskenneltäessä. Opit myös, kuinka kaksi suosittua Docker-klusterointitekniikkaa - Amazon ECS ja Docker Swarm - vertailevat, ja saat nopean oppaan oikean ratkaisun valitsemisesta myymälälle tai projektille. Opetusohjelma päättyy käytännön esittelyyn Docker Swarmin käytöstä kaksisolmuisen yritysklusterin kehittämiseen ja hallintaan.

Lue nyt: Säiliöohjattu kehitys Dockerin kanssa

Ennen sukellusta Docker Swarmiin on hyvä tuntea konttien hallitsema kehitys ja Dockerin perusteet. Alla on yleiskatsaus, mutta katso Docker-johdantoni perusteellisempaa keskustelua varten. Kehittäjien, jotka tuntevat nämä perusteet, tulisi siirtyä seuraavaan osioon.

Mikä on sopimus Dockerin kanssa?

Docker on avoin alusta hajautettujen sovellusten rakentamiseen, lähettämiseen ja käyttämiseen. Telakoituja sovelluksia voidaan käyttää paikallisesti kehittäjän koneella, ja ne voidaan ottaa käyttöön tuotantoon pilvipohjaisen infrastruktuurin kautta. Docker kehittää itseään nopeasti ja mahdollistaa jatkuvan integroinnin ja jatkuvan käyttöönoton, kuten melkein mikään muu tekniikka ei. Näiden ominaisuuksien takia se on foorumi, jota jokaisen kehittäjän tulisi osata käyttää.

On tärkeää ymmärtää, että Docker on kontti tekniikka, ei a virtualisointi tekniikkaa. Vaikka virtuaalikone sisältää täydellisen käyttöjärjestelmän ja sitä hallitaan raskaalla painolla, jota kutsutaan hypervisoriksi, kontti on suunniteltu erittäin kevyeksi ja itsenäiseksi. Jokainen palvelin ajaa daemon-prosessin, jota kutsutaan Docker-moottoriksi, joka suorittaa kontteja ja muuntaa kontin sisällä olevat käyttöjärjestelmän puhelut isäntäkäyttöjärjestelmän alkuperäisiksi puheluiksi. Vain paljon pienempi virtuaalikoneen vastainen säilö isännöi sovellustasi, ajonaikaisia ​​ympäristöjä ja barebones-käyttöjärjestelmää. Kontit toimivat tyypillisesti virtuaalikoneilla. Virtuaalikoneen käynnistäminen voi kestää minuutteja, kun taas kontti voi tehdä sen sekunneissa.

Kuvassa 1 on esitetty ero säiliön ja virtuaalikoneen välillä.

Docker-kontit ovat itsenäisiä, mikä tarkoittaa, että ne sisältävät kaiken sovelluksen suorittamiseen tarvittavan. Esimerkiksi Tomcatissa käynnissä olevalle verkkosovellukselle kontti sisältäisi:

  • WAR-tiedosto
  • Kollikissa
  • JVM
  • Peruskäyttöjärjestelmä

Kuva 2 esittää Docker-säilön sisällä olevan verkkosovelluksen arkkitehtuuria.

Dockerin tapauksessa kukin virtuaalikone suorittaa daemon-prosessin, jota kutsutaan Docker-moottori. Rakennat sovelluksesi, kuten WAR-tiedostosi, ja luot sitten vastaavan Docker-tiedosto. Dockerfile on tekstitiedosto, joka kuvaa, miten a Docker-kuva, joka on binaaritiedosto, joka sisältää kaiken tarvittavan sovelluksen suorittamiseen. Voit esimerkiksi rakentaa Docker-tiedoston Tomcatin peruskuvasta, joka sisältää Linux-käyttöjärjestelmän, Java-ajonaikaisen ja Tomcatin. Kun Docker on käsketty kopioimaan WAR-tiedosto Tomcatin verkkosovellushakemistoon, Dockerfile kootaan Docker-kuvaksi, joka koostuu käyttöjärjestelmästä, JVM: stä, Tomcatista ja WAR-tiedostostasi. Voit suorittaa Docker-kuvan paikallisesti, mutta julkaiset sen lopulta osoitteessa Docker-arkisto, kuten DockerHub.

Vaikka Docker-kuva on binäärinen versio säilöstäsi, Docker-kuvan ajonaikaisesiintymää kutsutaan Docker-kontti. Docker-kontteja hoitaa sinun Docker-moottori. Docker-moottoriasi käyttävää konetta kutsutaan Docker-isäntä; tämä voi olla paikallinen kannettava tietokone tai pilvialusta sovelluksesi laajuudesta riippuen.

Tämän osan perusteet antavat pohjan ymmärtää, miksi klusterointi on tärkeä lisä Docker-työkalupakkiisi. Katso lisätietoja Docker-johdannostani.

Ryhmittely Docker

Suurin osa Dockerin käytön aloittavista kehittäjistä rakentaa Dockerfile-tiedoston ja käyttää sitä paikallisesti kannettavalla tietokoneella. Mutta konttien hallinnassa on enemmän kuin yksittäisten Docker-konttien käyttäminen paikallisesti. Dockerin supervoimana on sen kyky skaalata astioita dynaamisesti ylös tai alas. Tuotannossa tämä tarkoittaa Dockerin suorittamista klusterissa joukon koneita tai virtuaalikoneita.

Erilaisia ​​Docker-klusterointitekniikoita on saatavana, mutta kaksi suosituinta ovat Amazon EC2 Container Service (ECS) ja Docker Swarm.

Amazon ECS

Amazonin Docker-klusterointitekniikka hyödyntää Amazon Web Services (AWS) -palvelua luomaan virtuaalikoneiden klusterin, joka voi käyttää Docker-kontteja. ECS-klusteri koostuu hallinnoidusta ECS-esiintymät, jotka ovat EC2-esiintymiä, joissa on Docker-moottori ja ECS-agentti. ECS käyttää automaattista skaalausryhmää laajentaakseen ja vähentääkseen ilmentymien määrää CloudWatch-käytäntöjen perusteella. Esimerkiksi kun ECS-ilmentymien keskimääräinen CPU-käyttö on liian korkea, voit pyytää ECS: ää käynnistämään useampia instansseja automaattisen skaalausryhmässä määritetyn enimmäismäärän määrään saakka.

Docker-kontteja hallinnoi ECS-palvelu ja määritetään laskentakapasiteetin (CPU) ja RAM-muistin määrän mukaan, jonka säilö tarvitsee suorittaa. ECS-palveluun on liitetty elastinen kuormituksen tasapainotin (ELB). Kun se käynnistää ja pysäyttää Docker-kontit, ECS-palvelu rekisteröi ja rekisteröi nämä kontit ELB: lle. Kun olet määrittänyt klusterisi säännöt, Amazon ECS varmistaa, että sinulla on haluttu määrä kontteja käynnissä ja että kaikkiin näihin säilöihin pääsee ELB: n kautta. Kuva 3 esittää korkean tason näkymän Amazon ECS: stä.

On tärkeää tehdä ero ECS: n välillä tapauksia ja tehtäviä. ECS-klusteri hallitsee ECS-ilmentymiäsi, jotka ovat erityisiä EC2-esiintymiä, jotka toimivat automaattisessa skaalausryhmässä. ECS-palvelu hallinnoi tehtäviä, jotka voivat sisältää yhden tai useamman Docker-säilön ja jotka suoritetaan klusterissa. ELB istuu ECS-ilmentymien edessä, jotka käyttävät Docker-konttejasi ja jakavat kuormaa Docker-kontteihisi. ECS-tehtävien ja Docker-konttien välinen suhde on, että tehtävämääritys kertoo ECS-palvelulle, mitä Docker-kontteja suoritetaan, ja näiden konttien kokoonpanon. ECS-palvelu suorittaa tehtävän, joka käynnistää Docker-säilöt.

Katso esittelyni Amazon ECS -palvelusta osoitteessa VMTurbo.com.

Docker-parvi

Dockerin natiivin klusterointitekniikan, Docker Swarmin avulla voit ajaa useita Docker-kontteja virtuaalikoneiden joukossa. Docker Swarm määrittelee a johtaja säilö, joka toimii virtuaalikoneella, joka hallitsee ympäristöä, sijoittaa säilöjä eri agenteille ja raportoi klusterin säilön tilan ja käyttöönottotiedot.

Kun suoritetaan Docker Swarm, johtaja on ensisijainen käyttöliittymä Dockeriin. Edustajat ovat "telakointikoneita", jotka toimivat virtuaalikoneilla, jotka rekisteröivät itsensä päällikölle ja käyttävät Docker-kontteja. Kun asiakas lähettää päällikölle pyynnön säilön käynnistämisestä, johtaja löytää käytettävissä olevan agentin sen suorittamiseksi. Se käyttää vähiten käytettyä algoritmia varmistaakseen, että agentti, joka käyttää vähiten kontteja, ajaa vasta pyydettyä säilöä. Kuvassa 4 on esimerkki Docker Swarm -kokoonpanosta, jonka kehität seuraavassa osassa.

Hallintaprosessi tietää kaikki aktiiviset aineet ja näillä aineilla käynnissä olevat säilöt. Kun agentin virtuaalikoneet käynnistyvät, he rekisteröivät itsensä päällikölle ja ovat sitten käytettävissä Docker-konttien suorittamiseen. Kuvan 4 esimerkissä on kaksi edustajaa (Agent1 ja Agent2), jotka on rekisteröity päällikön luona. Jokaisella agentilla on kaksi Nginx-säilöä.

Docker Swarm vs. Amazon ECS

Tässä artikkelissa on Docker Swarm, mutta on hyödyllistä verrata konttitekniikoita. Vaikka Amazon ECS tarjoaa hyvin kehitetyn avaimet käteen -ratkaisun, Docker Swarm antaa sinulle vapauden määrittää enemmän omaa infrastruktuuriasi. Esimerkiksi Amazon ECS hallinnoi sekä kontteja että kuorman tasauslaitteita, kun taas Docker Swarmissa määrität kuormituksen tasapainotusratkaisun, kuten Cisco LocalDirector, F5 BigIp tai Apache- tai Nginx-ohjelmistoprosessin.

Jos käytät sovellustasi jo AWS: ssä, ECS helpottaa Docker-konttien ajamista ja hallintaa paljon helpommin kuin ulkoinen ratkaisu. AWS-kehittäjänä olet todennäköisesti jo hyödyntämässä automaattisen skaalausryhmiä, ELB: itä, virtuaalisia yksityisiä pilviä (VPC), henkilöllisyyden ja käyttöoikeuksien hallinnan (IAM) rooleja ja käytäntöjä jne. ECS integroituu hyvin niihin kaikkiin, joten se on oikea tapa edetä. Mutta jos et ole käynnissä AWS: ssä, Docker Swarmin tiukka integrointi Docker-työkaluihin tekee siitä loistavan valinnan.

AWS ja Docker Swarm hybridipilvessä

Amazon Web Services voidaan konfiguroida erittäin korkeaan käytettävyyteen, skaalautuvuuteen ja suorituskykyyn, minkä vuoksi se palvelee todennäköisesti 25% kaikesta Internet-liikenteestä, mukaan lukien massiivisesti skaalattu Netflix-palveluinfrastruktuuri. Viime aikoina on kuitenkin pyritty kohti hybridipilviympäristöjä. A hybridipilvi on pilvi, jossa osa sovelluksesta tai joskus täydellinen kopio siitä toimii julkisessa pilvessä, kuten AWS, ja osa siitä toimii yksityisessä pilvessä. Suosittu vaihtoehto tässä tapauksessa on suorittaa OpenStack yksityisessä datakeskuksessa.

Hybridipilvi on turvallinen strategia yritykselle, joka siirtää osan tai kaikki toiminnot pilveen, mutta sen on mentävä hitaasti ja luotettava julkisiin pilvipalveluihin. Kun valitset hybridipilvivaihtoehdon, sinun on luotava abstraktiokerros taustalla olevien pilviteknologioiden päälle, mikä tarkoittaa, että voit käyttää yhtä helposti OpenStackissa käynnissä olevaan Docker Swarmiin omassa datakeskuksessasi kuin AWS: llä toimivaan ECS: ään. . Työkalut, kuten Chef ja Puppet, voivat auttaa antamalla sinun määritellä ympäristösi abstraktisti ja delegoimalla ne käsittelemään monia eri ympäristöjen välisiä eroja.

Docker Swarmin käytön aloittaminen

Edellisessä osassa näet kaksisolmun Docker Swarm -ryhmän malliarkkitehtuurin. Nyt kehität klusterin kahdella Nginx Docker -säilöesimerkillä. Nginx on suosittu verkkopalvelin, joka on julkisesti saatavilla Docker-kuvana DockerHubissa. Koska tämä artikkeli on keskittynyt Docker Swarmiin, halusin käyttää Docker-säiliötä, jonka aloitus on nopeaa ja helppoa ja helppo testata. Voit vapaasti käyttää mitä tahansa haluamaasi Docker-konttia, mutta havainnollistamiseksi valitsin tähän esimerkkiin Nginxin.

Johdanto Dockeriin sisältää oppaan Dockerin asentamisesta kehitysympäristöön. Jos olet asentanut ja asentanut Docker Toolboxin, se sisältää kaiken mitä tarvitset Docker Swarmin suorittamiseen. Katso lisäasennusohjeet Dockerin virallisesta dokumentaatiosta.

Docker Swarm komentorivillä

Jos olet aiemmin käyttänyt Dockeria, olet perehtynyt satamatyöläinen komentorivi konttien käynnistämiseen ja lopettamiseen. Kun käytät Docker Swarmia, käydään kauppaa satamatyöläinen varten telakointikone. Docker Machine määritellään Docker-dokumentaatiossa seuraavasti:

Docker Machine on työkalu, jonka avulla voit asentaa Docker Enginen virtuaalisiin isäntiin ja hallita isäntiä telakointikone -komennoilla. Koneella voit luoda Docker-isäntiä paikalliseen Mac- tai Windows-ruutuun, yritysverkkoon, palvelinkeskukseen tai pilvipalvelujen tarjoajiin, kuten AWS tai Digital Ocean. Docker-kone-komentojen avulla voit käynnistää, tarkastaa, pysäyttää ja käynnistää hallitun isännän, päivittää Docker-asiakkaan ja daemonin ja määrittää Docker-asiakkaan keskustelemaan isännän kanssa.

Jos olet asentanut Dockerin, asennuksesi sisältää jo Docker Machine -laitteen. Aloita Docker Swarm -ohjelmiston käyttö käynnistämällä Docker ja avaamalla pääte tietokoneellasi. Suorita seuraava telakointikone ls komento luetella kaikki paikallisen koneesi virtuaalikoneet:

 $ docker-machine ls NIMI AKTIIVINEN KÄYTTÄJÄN TILA URL SWARM oletus * virtuaalilaatikko Käynnissä tcp: //192.168.99.100: 2376 

Jos olet käyttänyt Dockeria vain paikalliselta koneeltasi, sinulla pitäisi olla Docker-oletusvirtuaalikone, jonka IP-osoite on 192.168.99.100. Voit säästää paikallisen koneesi resursseja pysäyttämällä tämän virtuaalikoneen suorittamalla: telakointiaseman pysäytys oletus.

Luo parvi

Docker-parvi koostuu kahdesta tai virtuaalikoneesta, jotka käyttävät Docker-ilmentymiä. Tätä esittelyä varten luomme kolme uutta virtuaalikonetta: manager, agent1 ja agent2. Luo virtuaalikoneesi käyttämällä telakka-kone luo komento:

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

telakka-kone luo komento luo uuden "koneen". Sen välittäminen -d Argumentin avulla voit määrittää ohjaimen, jota käytetään koneen luomiseen. Juoksu paikallisesti, sen pitäisi olla virtuaalilaatikko. Ensimmäinen luotu kone on johtaja, joka isännöi johtajaprosessia. Kaksi viimeistä konetta, agentti 1 ja agentti 2, ovat agenttikoneita, jotka isännöivät agenttiprosesseja.

Tässä vaiheessa olet luonut virtuaalikoneet, mutta et ole luonut varsinaista Swarm-ohjainta tai -agentteja. Voit tarkastella virtuaalikoneita ja niiden tilaa suorittamalla telakointikone ls komento:

 $ docker-machine ls NIMI AKTIIVINEN KÄYTTÄJÄN TILAN URL-osoite SWARM DOCKER ERRORS agent1 - virtualbox Suoritetaan TCP: //192.168.99.101: 2376 v1.11.1 agent2 - virtualbox Käynnissä TCP: //192.168.99.102: 2376 v1.11.1 oletus - virtuaaliruutu pysäytetty Tuntematon manager * virtualbox Käynnissä tcp: //192.168.99.100: 2376 v1.11.1 
$config[zx-auto] not found$config[zx-overlay] not found