‫Ora che hai compreso le basi della creazione di uno sciame multi-nodo e della creazione di reti sovrapposte e servizi
‫Docker, copriremo la prossima cosa davvero interessante su Swarm, che è stack. Non pile di pancake,
‫ma pile di servizi. In 1. 13, Docker ha aggiunto questa fantastica funzionalità che
‫aggiunge un altro strato di astrazione in cima alle pile. Fondamentalmente sono i file di Compose per la produzione di Swarm. Adesso stack accettano
‫i file Compose.
‫Dentro c'è quella che chiameremmo definizione dichiarativa, dove affermiamo che questo è ciò che
‫voglio sia il risultato finale.
‫Ed è compito dello sciame capire tutto questo. sono solo servizi; sono anche reti e volumi.
‫Ora non
‫E un piccolo sbirciatina.
‫In realtà includerà segreti, di cui parleremo nelle prossime lezioni.
‫Useremo un nuovo comando, che è lo stack di docker distribuito per importare questo file di Compose ed eseguire il comando
‫che abbiamo inserito.
‫Lo stack gestisce tutto questo.
‫Non ha bisogno di noi per andare a creare prima reti o prima di creare volumi, ma possiamo farlo totalmente.
‫External nel nostro file Compose per dire hey, queste sono già cose che esistono nel mio sciame.
‫Possiamo usare qualcosa chiamato Vai avanti e usa quelli, non preoccuparti di crearli.
‫Ma di solito finisci per avere i tuoi stack solo facendo tutto per te perché è più facile in questo modo.
‫Avremo alcune nuove funzionalità nel nostro file Compose, quindi inizieremo con quelle
‫che sembrano molto simili a quelle che avevamo prima. Ma avremo questa nuova chiave implementata, o dizionario, che
‫ci permetterà di specificare le cose che sono specifiche di Swarm.
‫Quante repliche vogliamo?
‫Cosa vogliamo fare quando eseguiamo il failover? Come vogliamo fare aggiornamenti continui e tutti quei
‫tipi di cose che non ci interesserebbero del nostro sistema di sviluppo locale.
‫Ma questo ha un prezzo, il che significa che non possiamo ancora fare il comando di costruzione. Questo potrebbe essere qualcosa che non
‫succederà mai in Swarm perché la mentalità qui è che l'edificio non dovrebbe accadere nello
‫sciame di produzione. Costruire è qualcosa che il tuo sistema di CI dovrebbe fare.
‫Forse Jenkins o qualcos'altro come Codeship.
‫Una volta che hai creato le tue immagini e le hai inserite nel tuo repository, questo stack sarà in effetti
‫quello che abbassa quelle immagini e le distribuisce con le opzioni di implementazione.
‫La buona notizia lì, però, è che vanno d'accordo.
‫Sul tuo computer locale, Compose ignorerà effettivamente quando esegui il comando docker-compose.
‫In
‫realtà ignorerà qualsiasi delle informazioni di distribuzione. In realtà dirà 'hey, hai distribuito le informazioni qui.
‫Non posso davvero usarlo, quindi ho intenzione di ignorarlo. "Allo stesso modo,
‫quando sei su Swarm e stai distribuendo un nuovo stack o un aggiornamento in una pila, in realtà dirà"
‫hey, qui hai i comandi di compilazione ".
‫Non faccio build, quindi li ignorerò e continuerò. 'La cosa bella è che
‫non devi cambiare il tuo file. possiamo effettivamente avere un singolo file Compose
‫che fa tutto ciò che ci serve per lo sviluppo e sul lato dello sviluppo della produzione.
‫Vedremo più tardi come
‫È molto bello.
‫Infine, non hai realmente bisogno della CLI di Docker Compose, il binario. Questo non ha bisogno di
‫essere nel tuo sciame. Perché di nuovo comporre, il comando attuale, non è uno strumento di produzione.
‫Non è stato progettato per essere prodotto.
‫È stato progettato per essere uno strumento di supporto per sviluppatori e sysadmin.
‫È davvero la cosa migliore per il lavoro locale sulle nostre macchine.
‫Lo sciame, che è fondamentalmente il motore Docker. file Compose usando quel comando stack.
‫Ora il Docker Engine può accettare i Legge i file Compose senza bisogno di Docker Compose in qualsiasi punto del server.
‫Rivediamo molto velocemente quando guardiamo ai nostri servizi.
‫Questo è come dovrebbe essere il nostro servizio. diciamo che è E diciamo che ne abbiamo specificato tre repliche.
‫Creeremmo un servizio. Nginx. Quindi, andrebbe quindi a creare tre attività nell'orchestrator
‫e quelle attività troveranno determinati server o nodi per inserirli e creerebbero contenitori.
‫Nei nuovi stack, stiamo parlando di più servizi, uno o più, giusto. Puoi avere dozzine di
‫servizi lì dentro. In quel singolo file YAML.
‫avevamo prima, solo ora possiamo fare volumi e sovrapporre le reti in quel file Compose.
‫Si comportano proprio come i servizi che E ciò
‫si traduce in quello che chiameremmo uno stack. Una pila controlla tutte quelle cose.
‫E in realtà metterà il suo nome correttamente su
‫tutti gli oggetti in modo da poter facilmente dire quali sono correlati a quale pila. In effetti inserirà anche le etichette,
‫che tratteremo in seguito, che è più metadata per poter determinare da quale pila proviene questa particolare cosa.
‫Quindi questo è davvero fantastico.
‫Ora usiamo un file YAML per fare effettivamente tutte quelle cose che non vogliamo dover digitare
‫nei comandi di servizio. Perché i comandi di servizio erano già abbastanza ingombranti e lunghi. diventato noioso, giusto.
‫E poi abbiamo finito con gli script di Bash per eseguire quei comandi, e poi è
‫Quindi, ora che abbiamo avuto Swarm
‫in giro per otto mesi, ora riceviamo questa funzione di stack che gestisce tali servizi.
‫Si noti che lo stack è solo per uno sciame.
‫Destra? Non può fare molti sciami.
‫Funzionerà solo su uno swarm in modo che possa controllare tutti i nodi e distribuire tutti
‫questi servizi, reti e volumi.
‫effettivamente avere una cosa in più, che è un segreto, perché lo stack può controllare anche quelli.
‫Dovrei dire che questo diagramma può Lo vedremo in una conferenza successiva in questa sezione. OK.
‫Diamo un'occhiata agli stack e al loro funzionamento.
‫Sono tornato nel mio sciame a 3 nodi che abbiamo creato in precedenza. Vado a massimizzare la finestra su node1 perché non
‫ho davvero bisogno degli altri due nodi.
‫Almeno non ho bisogno della loro riga di comando ssh.
‫Utilizzeremo l'esempio di app per le votazioni che abbiamo svolto nelle lezioni precedenti per questa sezione.
‫Se ti ricordi il nostro
‫design per questo, erano cinque diversi servizi, e tutti avevano dipendenze l'uno dall'altro.
‫E alla fine ci ha dato due diversi siti web.
‫Sei passato attraverso e sono sicuro
‫che hai creato la lista dei migliori servizi con tutti i valori e le opzioni di cui aveva bisogno ed è stato perfetto, giusto?
‫Sono qui per dirti che ora non è più necessario.
‫Era molto importante per noi usarli e non tutto avrebbe bisogno di un file stack.
‫Ma ora ho un file stack.
‫Diamo solo una rapida occhiata perché noterete che assomiglia molto a
‫un file Compose perché lo è. almeno la versione 3 o successiva.
‫L'unica vera cosa chiave che devi cambiare in quanto deve essere
‫L'ultima versione in questo momento è la versione 3. 1, ma sono sicuro che cambierà mentre continua a cambiare
‫e maturare.
‫Ma hai bisogno della versione 3 per usare gli stack.
‫Noterai che abbiamo i nostri redis e
‫il nostro db, e il nostro voto, e tutte queste cose che sono probabilmente molto simili a te dal tuo stesso lavoro. Probabilmente hai molta familiarità con quelle e le immagini di cui
‫hanno bisogno e le porte di cui hanno bisogno e tutto il resto.
‫Ma in questo caso, noterai la distribuzione.
‫La distribuzione qui è una nuova opzione. Vedrai qui che stavo specificando quante repliche
‫voglio, ovvero quante copie di quell'immagine devono essere eseguite alla volta.
‫E cosa succede quando faccio un aggiornamento.
‫Quindi quando eseguo un effettivo aggiornamento dello stack, che eseguirà quindi gli aggiornamenti del servizio.
‫Come voglio che si sviluppi?
‫Destra?
‫Voglio andare tutti giù allo stesso tempo? Ne voglio solo uno alla volta?
‫Quanto ritardo tra loro?
‫C'è un sacco di opzioni qui.
‫Stiamo solo graffiando la superficie, ma puoi vedere come se avessi una politica
‫di riavvio qui che se il contenitore fallisce, lo riavvii automaticamente.
‫Puoi vedere qui sotto il database, in realtà ho avuto dei limiti per
‫assicurarmi che si trovi su un nodo specifico.
‫Non abbiamo ancora parlato molto dei vincoli, ma
‫ci sono modi per noi di etichettare oggetti, cioè contenitori o immagini o qualsiasi cosa che possiamo creare o distruggere in Swarm o nella Docker stessa.
‫che è un manager riceve le proprie etichette.
‫Possiamo effettivamente assegnare etichette a qualsiasi di queste, inclusi i nodi, e un nodo
‫Questo è molto facile per noi fare semplicemente dire, hey, questo contenitore deve essere eseguito su un nodo che ha questo
‫ruolo particolare.
‫Ottimo esempio lì. Mentre scorriamo verso il basso, abbiamo alcune opzioni di parallelismo che abbiamo visto prima.
‫Questa opzione di ritardo è piuttosto interessante. Se hai una sorta di
‫tempo di riscaldamento quando hai dei contenitori che girano. Forse hanno iniziato ma in realtà non vanno in diretta per circa 60 secondi o qualcosa del genere.
‫È possibile aggiungere ritardi lì. Verificheremo quelli più tardi durante
‫le distribuzioni blu-verdi di produzione. Per ora, puoi vedere che sono tutti abbastanza standard.
‫In realtà abbiamo ancora più opzioni qui. Puoi vedere che assegno questa etichetta specifica.
‫Ho una finestra e un tentativo massimo per la politica di riavvio.
‫Quindi, se prova a riavviarsi, e continua a fallire, non tenterà più di tre volte.
‫Controlliamolo.
‫Tutto quello che devo fare è fare uno stack docker deploy -c per comporre. Quindi userò un file Compose.
‫Ora lo chiamerò voteapp. E noi andiamo. In realtà non
‫ha creato tutto e lo fa girare così velocemente.
‫nello scheduler, che quindi passeranno attraverso il processo di creazione dei servizi, che quindi creeranno le attività, che quindi creeranno i contenitori.
‫Tutto ciò che ha fatto è stato creare quegli oggetti
‫Deve anche creare le reti come vedrai qui. Ricorda che avevamo il frontend e il backend in modo da creare quelli,
‫così come una rete predefinita, che quel particolare file di stack
‫che avevo utilizzava una rete predefinita.
‫E poi vedrai questa opzione per visualizzatore che è una nuova che non abbiamo usato prima.
‫Lo vedremo tra un minuto.
‫Diamo quindi un'occhiata al comando del docker stack un po 'di più.
‫Vedrai che possiamo implementare. L'abbiamo già fatto.
‫Quindi abbiamo un ls, un ps, un rm
‫e servizi.
‫Quindi questo comando non ha un sacco di funzioni.
‫È piuttosto semplice perché tutte le funzionalità sono davvero
‫nel file Compose e negli oggetti che sta creando. oops
‫Dato che abbiamo già fatto tutto questo, possiamo fare cose come ls, che ci mostra solo tutti i nostri stack. Devo specificare il
‫È un comando piuttosto elementare. Abbiamo solo quello. Quindi se faccio un ps, in realtà mi mostra. nome. votazione.
‫Si chiama voteapp.
‫Devo farlo bene.
‫OK.
‫Lascia che ti riporti in modo che tu possa vedere un po 'meglio. Proprio qui.
‫Questi sono i compiti effettivi. Quindi puoi vedere su quale nodo stanno lavorando.
‫In realtà non sono i contenitori. In realtà è il compito che stiamo vedendo qui. Perché se fosse il vero contenitore, vedremmo
‫un nome lungo e grosso. Perché se ricordi,
‫i servizi che abbiamo creato in precedenza, avevano questi nomi davvero lunghi
‫se in realtà ci andavamo e facevamo la finestra mobile ps. Destra? ls, o una finestra mobile ps, ottieni questi nomi davvero lunghi.
‫Se ho fatto una finestra mobile container E questo perché hanno tutti un GUID,
‫perché ogni contenitore deve essere nominato in modo univoco.
‫Ecco come garantiscono che sono sempre unici e non si scontrano mai.
‫Quindi l'ultimo qui
‫è il servizio di pila stationage voteapp.
‫Mi piace il migliore, in realtà, perché mi mostra le mie repliche.
‫È un po 'come fare
‫un servizio ls. ho già avviato il numero corretto di contenitori.
‫Mi mostra quante repliche sono state avviate, quindi so se Quindi se voglio immergermi più a
‫fondo, allora potrei fare una finestra mobile ps. In realtà otteniamo qui i nomi delle attività e vediamo su quali nodi sono in esecuzione.
‫Questi due insieme offrono in realtà un'immagine completa di come è in esecuzione l'intera applicazione.
‫Se volessi immergermi nella rete, potrei fare
‫una rete docker come faremmo normalmente.
‫E puoi vedere queste tre nuove reti di overlay create per questa app. E nota che
‫il nome dell'app è sempre all'inizio. Lo stack precede sempre il nome del servizio.
‫Quindi ogni pila si assicurerà che il suo nome sia in primo piano.
‫E poi andiamo a dare un'occhiata.
‫Permettetemi di richiamare il mio browser.
‫Tutto ok.
‫Li possiamo vedere sulla porta 5000.
‫Ho il sito di voto in esecuzione.
‫Vado a 5001.
‫Ho il sito dei risultati in modo che possa colpire questo e quindi vedere il risultato.
‫Allora questo nuovo che abbiamo è chiamato un Visualizer. vedere nella sezione Risorse di questa sezione.
‫È il 8080. Il Visualizer è in realtà uno strumento molto carino a scopo dimostrativo. tutto questo è fatto da Docker, a proposito, e
‫Questo è in realtà fatto. questi sono tutti un repository open source che puoi Quindi abbiamo colori diversi per ogni servizio.
‫Il risultato voteapp è un verde.
‫E poi i redis sono un po 'monotoni e il voto è rosa. Puoi vedere che ci sono due
‫voti e ci sono due redises.
‫È piuttosto bello mostrare cosa succede mentre le cose si muovono intorno allo sciame.
‫Se in realtà sono andato nel mio file e ho fatto un cambiamento.
‫Andiamo all'app di voto e diciamo che vogliamo cambiare le repliche a cinque.
‫Potremmo andare e aggiornare il servizio. Ma è una specie di AntiPattern. Se entriamo e digitiamo manualmente, i comandi nel servizio, come l'aggiornamento del
‫servizio docker, significherebbe che la prossima volta che riapplicherò questo file YAML,
‫sovrascriverà tali modifiche.
‫Se hai mai fatto una formazione di cloud in AWS o in qualsiasi altra gestione della configurazione,
‫sai che una volta che usi un file di configurazione come questo per gestire la
‫tua infrastruttura, vuoi davvero usare sempre questo file perché sarà la fonte di verità.
‫Quindi probabilmente, in produzione, si tratterebbe di una sorta di file che conservi in ​​un repository Git
‫su cui hai il controllo della versione e che controlli le modifiche e in questo modo puoi ripristinare le modifiche.
‫In questo caso, cambierò il file molto rapidamente e eseguiremo
‫lo stesso comando, la distribuzione dello stack di docker.
‫Si noti che non abbiamo un aggiornamento. Perché stiamo per distribuire nello stesso stack e riconoscerà che è esistente e che
‫lo aggiorneremo in base a queste modifiche.
‫Per aggiornarlo, dobbiamo assicurarci di usare il nome giusto.
‫Quindi è voteapp. E poi noti che sta dicendo servizi di aggiornamento, ma riconosce che è necessario cambiarli.
‫Quindi se passiamo al nostro visualizzatore, puoi vedere che ce l'abbiamo già.
‫Oggi siamo troppo lenti, no?
‫Non siamo in grado di tenere il passo con lo sciame. Abbiamo già cinque di queste app di voto già in esecuzione.
‫Se ci sono voluti un po 'per correre e lanciare, in realtà vedremmo i
‫loro stati cambiare qui quando sono arrivati ​​online.
‫Ma è una semplice applicazione web, quindi inizierà presto.
‫Va bene.
‫Sono pile.
‫Ora aggiungiamo i segreti ai nostri stack.
‫