‫Questa sezione si concentrerà esclusivamente su Docker Compose, che è una combinazione di uno strumento
‫da riga di comando e un file di configurazione. I requisiti per questa sezione sono che hai
‫davvero bisogno di conoscere molti dei fondamenti delle ultime sezioni relative a immagini e contenitori.
‫Mentre stiamo seguendo questo corso, probabilmente inizierò a sentirmi diventare sempre
‫più eccitato perché le cose continuano a migliorare.
‫Destra?
‫Man mano che si impara un componente, si sta pensando: "man, bind mounts e volumi sono davvero fantastici. Mi farà risparmiare un po
‫'di tempo. Posso immaginare come lo userò. Blah blah blah blah.
‫Poi, verrò con la prossima cosa che sarà ancora migliore di quello che hai appena imparato.
‫In questo caso, non potrebbe essere più vero.
‫Docker Compose. Quindi, cos'è? E perché ci importa? Quindi pochi servizi software sono veramente standalone.
‫Quando si pensa ai contenitori, si tratta di un'unica soluzione di processo e raramente utilizzeremo un
‫solo contenitore per risolvere un problema o fornire un servizio ai nostri clienti.
‫I nostri contenitori richiederanno spesso altri contenitori come SQL o un valore chiave. E altre applicazioni che avremo bisogno di eseguire
‫in contenitori, come proxy o frontend Web o dipendenti di backend e così via.
‫esporre il pubblico porte e poi girarle tutte e strapparle con un solo comando.
‫E se avessimo un modo per collegare tutti quei pezzi della nostra soluzione insieme, dove non avevamo bisogno di
‫ricordare tutte le nostre opzioni di esecuzione della finestra mobile, e quindi portarli in discrete reti virtuali con relazioni tra
‫loro, e solo
‫Bene, questo è Docker Compose.
‫Prima di immergerci, dobbiamo chiarire che ci
‫sono due parti in Docker Compose. La prima parte è il file YAML ed è semplicissimo da capire.
‫È scritto in YAML e, se non hai mai avuto a che fare con YAML, è un linguaggio di configurazione molto semplice.
‫È quasi facile come un file INI.
‫In realtà penso che sia più facile perché mostra la gerarchia.
‫Ci tufferemo in quello. Quel file è dove devi specificare tutti i contenitori che devi
‫eseguire, le reti di cui hai bisogno, tutti i volumi che potresti avere bisogno, le variabili di ambiente, le immagini e tutti i tipi di altre
‫opzioni di configurazione.
‫Quindi la seconda parte di Docker Compose è uno strumento CLI, che è docker -compose, che
‫usiamo normalmente solo per sviluppatori e test locali, usando quel file YAML che abbiamo creato per semplificare i nostri comandi Docker.
‫Parliamo di quel file Docker Compose.
‫Ci sono in realtà versioni alle cose che puoi inserire nel file di composizione. realtà si chiamava "Fig" ed era appena assunto la versione 1.
‫Quindi, quando Docker Compose è stato creato anni fa, in In realtà non ha nemmeno
‫elencato una versione nel file. Con la sua maturazione e l'aggiunta di nuove funzionalità
‫a ciò che il file può avere in esso, come reti e volumi, hanno creato l'istruzione della versione, che
‫in realtà è la prima riga del file. Questo file può essere effettivamente utilizzato con una CLI di Docker Compose, di cui parleremo
‫tra un minuto.
‫Questo è, ancora una volta, principalmente per la gestione dello sviluppo locale e semplicemente rendendo più facile spostarsi
‫nei vostri ambienti sulla vostra macchina locale.
‫Ora, a partire dall'inizio del 2017, abbiamo la versione 1. direttamente con la riga di comando della finestra mobile in produzione con swarm.
‫13 e qualsiasi altra cosa, questi file possono ora essere utilizzati Ovviamente, c'è un grande aiuto nella
‫riga di comando con --help.
‫Osservando alcuni esempi, sappi che il file Docker Compose è un nome predefinito, ma puoi effettivamente usare
‫qualsiasi nome di file che vuoi, purché sia ​​corretto YAML e che tu usi il -f per specificare quale file tu
‫" sta cercando di usare.
‫Se apro il mio editor e guardo il template qui, volevo solo mostrare alcuni dei contorni di
‫come dovrebbe essere questo.
‫Abbiamo il valore della versione all'inizio.
‫La versione più recente del primo trimestre del 2017 è 3. 1.
‫Ma lo faccio sempre almeno nella versione 2. Se non si aggiunge quella linea, si presume sempre che sia la versione
‫1.
‫Ma non lo consiglio perché perdi molte funzionalità.
‫Quindi in genere inizio con la versione 2. Quindi se ho bisogno di funzionalità specifiche fuori dalla versione 3 e 3. 1, finisco per digitare
‫il numero di versione in là. Vedrai le altre tre sezioni principali
‫sono servizi, volumi e reti, giusto?
‫Quindi, questo è gerarchico.
‫Sotto i servizi, tutto può essere due o quattro spazi, ma deve essere coerente.
‫Se cerchi YAML su Internet, troverai alcuni siti che ti guideranno con le specifiche di
‫come formattare questo file.
‫Se stai usando un editor moderno, parlerà effettivamente la lingua YAML e saprà come gestire questi
‫file e la loro formattazione.
‫Di solito, qui, hai, come minimo, servizi, che sono in realtà solo contenitori.
‫Il motivo per cui in realtà li chiamano servizi è perché ogni contenitore che crei qui, potresti
‫effettivamente avere più di quei contenitori per la ridondanza. dovevano trovare una parola diversa.
‫Quindi
‫Penso che i servizi siano grandi perché è fondamentalmente quello che stai facendo. Destra?
‫Ogni contenitore, o contenitore, identico, che stai usando, di solito fornisce un servizio
‫a qualcosa.
‫Sotto il nome del servizio, e di nuovo puoi chiamarlo come vuoi.
‫Non deve essere il nome dell'immagine o non deve necessariamente avere alcun nesso.
‫Potrebbe essere Barney per il nome del servizio, ma sarà il nome DNS, che scopriremo in seguito,
‫viene utilizzato all'interno delle reti Docker.
‫Simile a quando si dà il comando --name a un comando di finestra mobile.
‫Qui, ho mostrato che possiamo facoltativamente specificare l'immagine. Possiamo specificare il comando
‫alternativo da eseguire. Se volessimo sovrascrivere il comando effettivo che è stato specificato nell'immagine quando
‫lo eseguiamo, possiamo farlo qui.
‫Fondamentalmente, tutte le cose che facciamo dal comando di esecuzione docker, possiamo salvarle qui. Perché questo è ciò che realmente si
‫tratta, sta prendendo tutto il lavoro fuori dal ricordare tutte le cose diverse nel comando di
‫esecuzione docker per quelle cose che stai correndo costantemente.
‫sviluppo o i tuoi strumenti, probabilmente non vorrai digitare quei comandi più e più volte.
‫Se hai i tuoi ambienti di E gli script di shell possono fare solo così tanto.
‫Destra?
‫Quindi, questo file sostituirà in realtà uno script di shell che automatizzerebbe i comandi di esecuzione della finestra mobile.
‫Questo è un modo molto migliore per farlo.
‫È più facile da leggere ed è meglio documentato.
‫Noterai che gli spazi qui sono consentiti.
‫Puoi avere spazi nei commenti dove vuoi.
‫Se hai più servizi, devi solo assicurarti che siano nomi univoci.
‫Quindi, le altre parti che specifichiamo sono volumi e reti. E ancora, questi sono opzionali pure.
‫Fondamentalmente sono le stesse regole di quando stai correndo dalla riga di comando.
‫Se si dovesse mai aver bisogno di usare il docker volume create o la docker network creare comandi, e
‫ancora, non è sempre necessario.
‫Dipende solo dalla tua situazione.
‫Puoi metterli anche qui.
‫Diamo un'occhiata ad un mondo reale, semplice esempio.
‫sezione, abbiamo tenuto una lezione in cui abbiamo usato Jekyll molto velocemente per fare un esempio di montaggio bind.
‫Ti ricordi nell'ultima
‫Ecco come appare il file di composizione per il comando di esecuzione della finestra mobile, e vedrai
‫che ho specificato l'immagine qui.
‫L'ho chiamato Jekyll.
‫Ho dato un volume. Noterete invece di usare il pwd, in realtà Compose comprende il punto, ovvero
‫questa è la directory di lavoro corrente in cui mi trovo.
‫Basta usare questa directory da cui sto eseguendo il file di composizione. Quindi le porte o l'opzione -p.
‫un'immagine per ogni servizio, di solito sarebbe un formato chiave e di valore come questo.
‫Noterai alcune piccole cose su YAML, dove quando qualcosa ha solo un'opzione, come se ci fosse solo
‫Se si tratta di un elenco di elementi, come volumi e porte in cui è possibile averne di più, noterete che
‫il file di composizione di solito ha un plurale. Invece del volume, sono i volumi. E invece di port, sono le porte.
‫E poi ci sarà un formato elenco con un -.
‫Se saltiamo in un altro esempio, molto velocemente.
‫Vedrete che in questo caso, si tratta
‫in realtà di una configurazione di WordPress di esempio in cui si dispone del servizio di database quaggiù che
‫esegue un contenitore di database.
‫E poi il contenitore del server web WordPress in cima.
‫Noterai che una cosa leggermente diversa da questa è che stiamo usando le variabili di
‫ambiente, che sarebbero le stesse di -e alla riga di comando. Ma invece di un formato di lista in cui
‫abbiamo un -, questo è,
‫ancora una volta, un'altra affermazione di chiave e valore.
‫In questo formato, non usiamo il -, elenchiamo solo la chiave e il valore.
‫Se dovessi aggiungerne un altro, lo farei qui. Tutti questi sarebbero passati nel contenitore, quando
‫viene eseguito, utilizzando la riga di comando di composizione.
‫Poi, infine, abbiamo un altro esempio. Questo è un po 'più complicato. È in realtà uno
‫su cui stavo lavorando di recente per configurare un cluster di server con tre database dietro un server Web Ghost.
‫Ghost è in realtà un sistema di blog simile a WordPress. Vedrai che ho più variabili
‫di ambiente per ciascuno di questi contenitori.
‫Quindi ho il mio contenitore Ghost in cima. Quindi in realtà ho questa cosa conosciuta come SQL
‫Proxy, che si trova di fronte ai server MySQL e funge da bilanciamento del carico e soluzione di failover.
‫Poi ho ciascuno dei miei due server MySQL. Noterai un'altra opzione quaggiù che dice 'dipende
‫da' e dipende da una piuttosto comune.
‫Fondamentalmente aiuta Compose a capire la relazione tra questi servizi. Sa che se ho bisogno di
‫avviare il mio Ghost, allora ho anche bisogno di avviarne altri.
‫Puoi vedere qui che il mio Ghost in realtà dipende da questi. Entreremo nei dettagli di come
‫funziona nelle conferenze successive.
‫Ma per ora, questo è probabilmente molto da digerire, e tutti questi diversi comandi e quant'altro, ma crediamo
‫che Docker abbia una documentazione davvero eccezionale sul loro sito web. Se cerchi solo il file Docker Compose su
‫Google, probabilmente lo troverai con i primi due colpi.
‫Sarà sotto i documenti. finestra mobile. opzione di valore che hai.
‫com, come al solito, e sarà la documentazione su ogni singola piccola chiave e
‫Vedrai che dipende da quanto ho appena detto. Vedrai l'ambiente qui dove mostra diversi modi
‫di inserire variabili d'ambiente. La cosa fantastica di questa documentazione è che
‫ti offre molti esempi.
‫Personalmente, sono su questo sito ogni giorno, proprio come se fossi sulla finestra mobile esegui la pagina delle opzioni di comando o componi la pagina
‫delle opzioni di comando.
‫Mi riferisco costantemente a questi perché al giorno d'oggi ci sono solo tante caratteristiche che non riesco
‫a ricordare tutte.
‫Quindi li tengo vicini nei miei segnalibri.
‫Ora che abbiamo un'idea generale di come potrebbe essere il formato del file di composizione, passiamo alla
‫riga di comando e impariamo lo strumento CLI di Docker Compose.