Docker Compose vs Docker Swarm

Docker Compose vs Docker Swarm

App Web e microservizi

Con le app "rivoluzione" del contenitore è cresciuta molto di più che essere solo un database e un frontend. Le applicazioni sono divise in vari microservizi e in genere comunicano tra loro tramite un'API REST (in genere i payload formattati da JSON su HTTP). I contenitori Docker sono ideali per questo tipo di architettura. Puoi impacchettare il tuo "microservizio" del frontend in un contenitore Docker, il database va in un altro, e così via e così via. Ogni servizio parla con un altro rispetto a un'API di riposo predefinita invece di essere un monolite scritto come un singolo software.

Se è necessario implementare una nuova funzionalità o una funzione, E.G, un motore di analisi, puoi semplicemente scrivere un nuovo microservizio per questo e consumerebbe dati tramite l'API REST esposta dai vari microservizi della tua app web. E man mano che la tua funzionalità cresce nel tempo, anche questo elenco di microservizi crescerà insieme ad esso.

Non vuoi distribuire ogni singolo contenitore, configurarlo e quindi configurare tutto il resto per parlarne anche. Questo diventerà noioso con anche tre contenitori. Docker-compose ti consente di automatizzare la distribuzione di più contenitori.

Docker-compose è uno degli strumenti più semplici che ti aiuta a trasformare l'idea astratta dei microservizi in un set funzionale di contenitore Docker.

Sistemi distribuiti

Ora che abbiamo diviso l'app Web in più contenitori, ha poco senso tenerli tutti su un singolo server (peggio ancora su una singola macchina virtuale!) ecco dove entrano servizi come Docker Swarm e Kubernetes.

Docker Swarm ti consente di eseguire più repliche dell'applicazione su più server. Se il tuo microservizio è scritto in modo da poter scalare "in orizzontale", puoi utilizzare Docker Swarm per distribuire la tua app Web su più data center e più regioni. Ciò offre resilienza contro il fallimento di uno o più data center o collegamenti di rete. Questo viene in genere fatto usando un sottocomando in Docker, cioè Docker Stack.

IL Docker Stack Il sottocomando si comporta molto più come il comando docker-compone e questo può portare a idee sbagliate a qualcuno che usa una delle tecnologie.

Fonte di confusione

In termini di utilizzo e flusso di lavoro, sia le tecnologie che funzionano molto simili tra loro, e questo provoca confusione. Il modo in cui si distribuisce l'app utilizzando Docker Swarm o Docker-Opse è molto simile. Definisci l'applicazione in un file YAML, questo file conterrà il nome dell'immagine, la configurazione per ogni immagine e anche la scala (numero di repliche) che ogni microservizio sarà tenuto a soddisfare.

La differenza risiede principalmente nel backend, in cui Docker-Opse distribuisce contenitore su un singolo host Docker, Docker Swarm lo distribuisce su più nodi. In modo libera, può ancora fare la maggior parte delle cose che Docker-Opse può, ma lo ridimensiona su più host Docker.

Analogie

Sia Docker Swarm che Docker-Opse hanno le seguenti somiglianze:

  1. Entrambi prendono definizioni formattate YAML del tuo stack dell'applicazione.
  2. Entrambi sono destinati a gestire applicazioni multi-container (microservizi)
  3. Entrambi hanno un parametro di scala che consente di eseguire più contenitori della stessa immagine che consente al tuo microservizio di scalare in orizzontale.
  4. Sono entrambi mantenuti dalla stessa azienda, io.E, Docker, Inc.

Differenze

Le poche differenze tra Docker Swarm e Docker-Ongose:

  1. Docker Swarm viene utilizzato per ridimensionare l'app Web su uno o più server. Dove come docker-compose eseguirà semplicemente la tua app web su un singolo host Docker.
  2. Il ridimensionamento del tuo Web App Docker Swarm offre una seria disponibilità e tolleranza ai guasti. Il ridimensionamento dell'app Web utilizzando Docker-Opse su un singolo host è utile solo per i test e lo sviluppo.
  3. Docker Swarm e correlati sottocombi come Docker Swarm e Docker Stack sono integrati nella stessa Docker CLI. Fanno tutti parte del binario Docker che chiami tramite il tuo terminale. Docker-compose è binario autonomo in sé e per sé.

Un caso d'uso per docker-compone

Come descritto sopra, sono entrambi strumenti completamente diversi e ognuno risolve un problema completamente diverso, quindi non è come se uno sia un'alternativa per l'altro. Tuttavia, per dare ai nuovi arrivati ​​una sensazione di ciò di cui sto parlando, ecco un caso d'uso per Docker Compose.

Supponiamo di voler auto-ospitare un blog WordPress su un singolo server. Impostarlo o mantenerlo non qualcosa che vuoi fare, manualmente, quindi ciò che faresti invece è installare Docker e Docker-Ongose ​​sui tuoi VP, crea un semplice file YAML che definisce tutti i vari aspetti del tuo stack WordPress, come sotto, :

NOTA: se si utilizza il seguente per distribuire un sito WordPress, si prega di modificare tutte le password in qualcosa di sicuro. Meglio ancora, utilizzare i segreti Docker per archiviare dati sensibili come password, invece di averli in un file di testo semplice.

Versione: '3'
Servizi:
DB:
Immagine: Mysql: 5.7
Volumi:
- db_data:/var/lib/mysql
Riavvia: sempre
ambiente:
Mysql_root_password: somewordpress
Mysql_database: wordpress
Mysql_user: wordpress
Mysql_password: wordpress
WordPress:
dipende da:
- db
Immagine: WordPress: ultimo
Porte:
- "8000: 80"
Riavvia: sempre
ambiente:
Wordpress_db_host: DB: 3306
Wordpress_db_user: wordpress
Wordpress_db_password: wordpresspassword
Wordpress_db_name: wordpress
Volumi:
db_data:

Una volta creato il file e sono installati sia Docker che Docker-Opse, tutto ciò che devi fare è eseguire:

$ Docker -Opse Up -D

E il tuo sito sarà attivo e funzionante. Se c'è un aggiornamento, allora esegui:

$ Docker-compone

Quindi getta via le vecchie immagini Docker ed esegui il comando Docker -Op -Up -D e nuove immagini verranno automaticamente attirate. Dal momento che hai i dati persistenti archiviati in un volume Docker, il contenuto del tuo sito Web non andrà perso.

Quando usare Docker Swarm

Mentre Docker-Opgy è più uno strumento di automazione, Docker Swarm è pensato per applicazioni più impegnative. App Web con centinaia o migliaia di utenti o carico di lavoro che devono essere ridimensionati in parallelo. Le aziende con una base di utenti di grandi dimensioni e requisiti SLA rigorosi vorrebbero utilizzare un sistema distribuito come Docker Swarm. Se la tua app viene eseguita su più server e più data center, le possibilità di inattività a causa di una DC o un collegamento di rete interessate vengono significativamente ridotte.

Detto questo, esito a raccomandare Docker Swarm per casi d'uso di produzione perché tecnologie concorrenti come Kubernetes sono probabilmente più adatte a questo compito. Kubernetes è supportato in modo nativo in molti fornitori di cloud e funziona abbastanza bene con i contenitori Docker, quindi non devi nemmeno ricostruire la tua app per sfruttare Kubernetes.

Conclusione

Spero che questo sconclusionato su Docker e i suoi progetti satellitari sia stato informativo e tu sia più preparato per l'ecosistema Docker.