‫Acum că înțelegeți elementele de bază ale creării unui roi multi-nod și crearea rețelelor suprapuse și a serviciilor Docker,
‫vom acoperi următorul lucru foarte interesant despre Swarm, care este stivă. Nu stive de clatite, ci
‫stive de servicii. În 1. 13, Docker a adăugat această caracteristică foarte bună, care
‫adaugă un alt strat de abstractizare în partea de sus a stivei. În esență, compune fișiere pentru producția de Swarm. Acum stivele acceptă
‫Compune fișiere.
‫Înăuntru este ceea ce noi ar numi o definiție declarativă, în care afirmăm că acesta este ceea ce
‫vreau să fie rezultatul final.
‫Și este treaba roiului să-și dea seama de toate astea. Acum nu sunt doar servicii; sunt și rețele
‫și volume.
‫Și o scurtă privire.
‫De fapt, vor include secrete, despre care vom vorbi în următoarele câteva prelegeri.
‫Folosim o nouă comandă, care se implementează pentru a importa acest fișier Compose și executați comanda pe care o punem
‫în ea.
‫Stack-ul gestionează toate astea.
‫Nu are nevoie să mergem și să creăm mai întâi rețele sau să creăm mai întâi volume, dar putem face acest lucru în totalitate.
‫Putem folosi ceva numit extern în fișierul Compose pentru a spune hei, acestea sunt deja lucruri care
‫există în roiurile mele. Du-te și folosiți-le, nu vă deranjează să le creați.
‫Dar, de obicei, îți dai seama doar că faci totul pentru tine, pentru că e mai ușor așa.
‫Vom primi noi caracteristici în fișierul nostru Compose, așa că vom începe cu cele
‫care arată foarte asemănătoare cu ceea ce am avut înainte. Dar vom obține această cheie nouă implementată acolo sau
‫dicționar, care ne permite să specificăm lucrurile care sunt specifice pentru Swarm.
‫Câte replici vrem?
‫Ce vrem să facem atunci când ne-am dat faliment? Cum vrem să facem actualizări de rulare și toate
‫acele fel de lucruri despre care nu ne-ar interesa mașina noastră de dezvoltare locală.
‫Dar asta vine la un preț, adică nu putem face comanda de construire încă. Asta poate fi ceva ce nu se
‫va întâmpla niciodată în Swarm deoarece mentalitatea este că această clădire nu ar trebui să se întâmple pe
‫roi de producție. Clădirea este ceva ce ar trebui să faceți sistemul dvs. CI.
‫Poate Jenkins sau altceva ca Codeship.
‫Odată ce ați construit imaginile și le-ați pus în depozit, acest stiva va fi de fapt cel care
‫va trage aceste imagini și va implementa cu opțiunile de implementare.
‫Vestea bună acolo, totuși, este că se înțeleg de fapt.
‫Pe mașina dvs. locală, Compose va fi ignorată când executați comanda doc-compunere.
‫De
‫fapt, va ignora oricare dintre informațiile de implementare. Acesta va spune de fapt "hei, tu ai pus informații aici.
‫Nu-mi pot folosi cu adevărat, așa că o să o ignor. "De asemenea,
‫când sunteți pe Swarm și desfășurați un nou stack sau o actualizare la un stack, va spune de
‫fapt" hei, aveți comenzi de construcție aici.
‫Nu fac construcții, așa că o să le ignor și să continui. "Lucrul frumos e
‫că nu trebuie să-ți schimbi dosarul. Vom vedea mai târziu cum putem avea de
‫fapt un singur fișier Compose care face tot ce trebuie să facem pe partea de dezvoltare și pe partea
‫de desfășurare a producției.
‫Este destul de misto.
‫În cele din urmă, nu aveți nevoie de Docker Compose CLI, binar. Asta nu trebuie să fie
‫în roiurile voastre. Deoarece compune din nou, comanda reală, nu este un instrument de producție.
‫Nu a fost conceput pentru a fi producție.
‫A fost proiectat pentru a fi un dezvoltator și un utilitar sysadmin helper.
‫Este foarte bine pentru munca locală pe mașinile noastre.
‫Robul, care este în esență motorul Docker. Acum, Docker Engine poate
‫accepta compilarea fișierelor utilizând comanda respectivă. Se citește fișierele Compune fără a fi nevoie să se compună Docker oriunde pe server.
‫Să revedem rapid când ne uităm la serviciile noastre.
‫Acesta este aspectul serviciului nostru.
‫Am creat un serviciu ...
‫să spunem că e Nginx. Și să spunem că am specificat trei replici ale lui.
‫Deci, atunci ar merge și să creeze trei sarcini în orchestrator, iar acele sarcini ar găsi anumite servere sau noduri
‫care să le pună pe ele și ar crea containere.
‫În noile stive, vorbim despre mai multe servicii, una sau mai multe, bine. Puteți avea zeci de servicii
‫acolo. În acel singur fișier YAML.
‫Aceștia se comportă exact ca serviciile pe care le-am avut înainte, abia acum avem de făcut volumele și rețelele suprapuse în
‫acel dosar Compose. Și asta are
‫drept rezultat ceea ce numim un stiva. O stivă controlează toate aceste lucruri.
‫Și de fapt, acesta va pune numele în mod corespunzător pe toate obiectele, astfel încât să puteți spune cu
‫ușurință care sunt legate de ce stiva. De fapt, vom pune și etichete acolo, pe care le
‫vom acoperi mai târziu, ceea ce reprezintă mai multe metadate pentru a putea determina ce stivă a venit de la acest lucru.
‫Deci, acest lucru este minunat.
‫Acum folosim un fișier YAML pentru a face efectiv toate acele lucruri pe care nu am dori să le
‫scriem în comenzile de serviciu. Deoarece comenzile de serviciu erau deja destul de greoaie și lungi. Apoi am ajuns să facem
‫scripturi de tip Bash pentru a rula aceste comenzi și apoi a devenit plictisitor, corect.
‫Deci, acum că am avut în jurul valorii de Swarm timp de opt luni, acum avem această caracteristică stack care
‫gestionează aceste servicii.
‫Observați că stiva este doar pentru un roi.
‫Dreapta? Nu poate face multe roiuri.
‫Va merge doar pe un roi, astfel încât să poată controla toate nodurile și să implementeze
‫toate aceste servicii, rețele și volume.
‫Ar trebui să spun că această diagramă poate avea de fapt încă un lucru în ea, ceea ce este
‫secrete, deoarece stiva poate controla și ele aceste. Vom vedea asta într-o conferință ulterioară din această secțiune. O.K.
‫Să ne uităm la stack-uri și la modul în care funcționează.
‫M-am întors în roiul cu 3 noduri pe care l-am construit mai devreme. Voi maximiza fereastra pe nodul 1 pentru că
‫nu am nevoie de celelalte două noduri.
‫Cel puțin nu am nevoie de linia de comandă ssh.
‫Vom folosi exemplul aplicației de votare pe care am făcut-o în cursul precedent pentru această secțiune.
‫Dacă vă aduceți aminte de designul nostru, au fost cinci servicii diferite și toate au avut dependențe una
‫de alta.
‫Și în cele din urmă ne-a oferit două site-uri diferite.
‫Ai trecut prin și sunt sigur că ai făcut cea mai bună listă de servicii cu toate valorile și opțiunile de care
‫ai nevoie și a fost perfectă, nu?
‫Sunt aici să vă spun că acum nu mai este nevoie.
‫A fost foarte important pentru noi să le folosim și nu totul va avea nevoie de un fișier de stivă.
‫Dar acum am un dosar de stivă.
‫Să aruncăm o privire la ea într-adevăr rapid, pentru că veți observa că
‫pare foarte mult ca un fișier Compose, deoarece este. Singurul lucru cheie pe care trebuie să-l schimbați trebuie să fie cel puțin versiunea 3
‫sau mai mare.
‫Cea mai recentă versiune este acum versiunea 3. 1, dar sunt sigur că se va schimba pe măsură ce va continua să
‫se schimbe și să se maturizeze.
‫Dar aveți nevoie de versiunea 3 pentru a utiliza stive.
‫Veți observa că avem redistribuirea noastră, db-ul nostru și votul nostru, și toate aceste lucruri care sunt,
‫probabil, foarte asemănătoare cu dumneavoastră din propria voastră muncă. Probabil că sunteți foarte familiarizat cu acele imagini și cu imaginile de care au nevoie
‫și cu porturile de care au nevoie și cu toate acestea.
‫Dar în acest caz, veți observa desfășurarea.
‫Implementarea aici este o nouă opțiune. Veți vedea aici că specificam câte replici vreau, câte
‫copii ale acelei imagini trebuie să fie difuzate la un moment dat.
‫Și ce se întâmplă când fac o actualizare.
‫Deci, când fac o actualizare stack actuală, care va face apoi actualizări de serviciu.
‫Cum vreau să se extindă?
‫Dreapta?
‫Vreau să se ducă toți în același timp? Vreau doar unul pe rând?
‫Câtă întârziere între ei?
‫Sunt tot felul de opțiuni aici.
‫Suntem doar un fel de scratching suprafață, dar puteți vedea ca am o politică de repornire aici,
‫că în cazul în care containerul nu reușește, reporniți-l automat.
‫Puteți vedea aici în baza
‫de date, de fapt am avut constrângeri pentru a vă asigura că este pe un anumit nod.
‫Nu am vorbit încă foarte mult despre constrângeri, dar există modalități de etichetare
‫a obiectelor, adică a containerelor sau a imaginilor, sau chiar a ceva ce putem crea sau distruge în Swarm sau în Docker în sine.
‫De fapt, putem atribui etichete fiecăruia dintre aceștia, inclusiv noduri, iar un nod care este un manager are
‫propriile etichete.
‫Acest lucru este foarte simplu pentru noi de a face doar pentru a spune, hei, acest container trebuie să ruleze pe un nod
‫care are acest rol special.
‫Exemplu excelent acolo. Pe măsură ce defilează în jos, avem câteva opțiuni de paralelism pe care le-am văzut înainte.
‫Această opțiune de întârziere este destul de rece. Dacă aveți un fel de timp de încălzire
‫când aveți containere care se învârte. Poate că au început, dar ei nu se duc de fapt în viață, poate pentru 60 de secunde sau ceva.
‫Puteți adăuga întârzieri acolo. Ne vom uita la aceia
‫mai târziu în timpul desfășurării producțiilor albastre-verzi. Pentru moment, puteți vedea că toate acestea sunt destul de standard.
‫De fapt avem mai multe opțiuni aici. De fapt, puteți vedea că îi atribuie o etichetă specifică.
‫Am o fereastră și o încercare maximă pentru politica de repornire.
‫Deci, dacă încearcă să repornească și continuă să eșueze, nu va încerca mai mult de trei ori.
‫Hai să verificăm.
‫Tot ce trebuie să fac este să depun un stack de doc-c pentru compunere. Deci voi folosi un fișier Compose.
‫Acum o voi numi voteapp. Și acolo mergem. De fapt, nu a creat totul și a făcut
‫așa de repede.
‫Tot ce a făcut a fost să creeze acele obiecte din programator, care apoi vor trece prin
‫procesul de creare a serviciilor, care apoi creează sarcinile, care apoi creează containerele.
‫De asemenea, trebuie să creați rețelele așa cum veți vedea aici. Amintiți-vă că am avut frontend și backend astfel
‫încât a creat aceste, precum și o rețea implicită, pe care acel fișier de stivă particularizat pe care l-am folosit a
‫fost o rețea implicită.
‫Apoi veți vedea această opțiune pentru vizualizatorul, care este unul nou pe care nu l-am folosit înainte.
‫Vom vedea asta într-un minut.
‫Deci, să aruncăm o privire mai mult la comanda stack-ului.
‫Veți vedea că putem implementa. Am făcut deja asta.
‫Apoi
‫avem un ls, un ps, un rm, și servicii.
‫Deci această comandă nu are o mulțime de trăsături pentru ea.
‫Este destul de simplu, deoarece toate funcționalitățile sunt într-adevăr în fișierul Compose și într-adevăr în obiectele
‫pe care le creează.
‫De vreme ce am făcut deja toate astea, putem face lucruri precum ls, care ne arată toate stivele noastre.
‫Este o comandă destul de bază. Avem doar unul. Apoi, dacă fac un ps, mă arată de fapt ... Oops trebuie
‫să precizez numele.
‫vot.
‫Se numește voteapp.
‫Trebuie să obținem acest drept.
‫O.K.
‫Dă-mi voie să-ți întăresc asta, ca să vezi asta puțin mai bine. Chiar acolo.
‫Acestea sunt sarcinile reale. Apoi puteți vedea nodul pe care rulează.
‫Nu sunt containerele. Este de fapt sarcina pe care o vedem aici. Pentru că dacă era containerul
‫real, am vedea un nume mare și lung. Pentru că, dacă vă amintiți, serviciile pe care le-am creat mai devreme, aveau
‫aceste nume cu adevărat lungi
‫dacă am mers și am făcut-o docker ps. Dreapta? Dacă am făcut un container
‫de docker sau un docker, ai aceste nume cu adevărat lungi. Și asta pentru că toți au un GUID, pentru că fiecare container trebuie
‫să fie denumit în mod unic.
‫De aceea ei garantează că sunt întotdeauna unici și nu se ciocnesc niciodată.
‫Apoi
‫ultima este aici.
‫Îmi place cel mai bine, pentru că îmi arată replicile mele.
‫E un fel
‫de a face un serviciu ls. Îmi arată câte replici am început, așa că știu dacă am
‫primit numărul corect de containere deja pornite. Apoi, dacă vreau să mă scufund
‫mai adânc, aș putea să fac un stack doc. De fapt, primim numele de sarcini aici și vedem la ce noduri se execută.
‫Aceste două împreună vă oferă o imagine completă a modului în care funcționează întreaga aplicație.
‫Dacă vroiam să mă arunc în rețea, aș putea să fac o rețea de docare așa
‫cum am fi făcut în mod normal.
‫Și puteți vedea aceste trei noi rețele suprapuse care au fost create pentru această aplicație. Și observați că numele
‫aplicației este întotdeauna la început. Stiva precede întotdeauna numele serviciului.
‫Deci, fiecare stiva se va asigura că numele este în față.
‫Și apoi să mergem să verificăm.
‫Permiteți-mi să-mi aduc browserul.
‫In regula.
‫Le vedem pe portul 5000.
‫Am site-ul de vot care rulează.
‫Mă duc la 5001.
‫Am site-ul pentru rezultate, astfel încât să pot lovi acest lucru și apoi să văd rezultatul.
‫Apoi, noua noastră pe care o avem este numită Visualizer.
‫E pe 8080. Vizualizatorul este de fapt un instrument destul de elegant pentru demonstrații.
‫Asta a fost făcută ... toate acestea sunt făcute de Docker, apropo, și toate
‫acestea sunt un repo sursă deschisă pe care le puteți vedea în secțiunea Resurse din această secțiune.
‫Deci avem culori diferite pentru fiecare serviciu.
‫Rezultatul voteapp este verde.
‫Și apoi redis este un fel de mustar, și votul este un roz. Puteți vedea că există două voturi și sunt
‫două redesenări.
‫Este destul de minunat să arătați ce se întâmplă când lucrurile se mișcă în jurul roiului.
‫Dacă am intrat de fapt în dosarul meu și am făcut o schimbare.
‫Hai să mergem la aplicația de votare și să spunem că vrem să schimbăm replicile la cinci.
‫Am putea merge și să actualizăm serviciul. Dar asta e un fel de AntiPattern. Dacă intrăm și introducem manual, comenzi
‫în serviciu, cum ar fi actualizarea serviciului
‫docker, ar însemna că data viitoare când voi aplica din nou acest fișier YAML, va suprascrie aceste modificări.
‫Dacă ați făcut vreodată o formare de nor în AWS sau orice alt management de configurare, știi că odată
‫ce folosești un fișier de configurare ca acesta pentru a-ți gestiona infrastructura, chiar vrei să folosești întotdeauna acest
‫fișier pentru că va fi sursa de adevăr.
‫Deci, probabil, în producție, ar fi un fel de fișier pe care îl păstrați într-un depozit Git
‫pe care aveți controlul versiunii și vă controlați modificările, astfel încât să puteți revoca modificările.
‫În acest caz, voi schimba rapid dosarul și vom executa aceeași comandă, care se va desfășura în
‫stack.
‫Observați că nu avem o actualizare. Pentru că vom depune la același stack și
‫va recunoaște că este deja existent și că o vom actualiza pe baza acestor modificări.
‫Pentru a le actualiza, trebuie să ne asigurăm că folosim numele potrivit.
‫Deci, este votapp. Și apoi observați că spune că serviciile de actualizare, dar recunoaște că trebuie să le schimbe.
‫Apoi, dacă mergem la vizualizatorul nostru, puteți vedea că deja l-am primit.
‫Astăzi suntem prea înceți, nu-i așa?
‫Nu putem să ținem pasul cu roiul. Acum avem cinci dintre aceste aplicații de vot care rulează deja.
‫Dacă le-a luat ceva timp să alerge și să lanseze, am vedea că statele lor se schimbă aici, când au
‫venit online.
‫Dar este o aplicație web simplă, așa că va începe destul de repede.
‫Bine.
‫Sunt stive.
‫Acum, să adăugăm secretele în stivele noastre.