Docker Compose vs Docker Swarm

Docker Compose Vs Docker Swarm



Cu containerul, „revoluția” a crescut mult mai mult decât a fi doar o bază de date și un frontend. Aplicațiile sunt împărțite în diferite microservicii și comunică de obicei între ele printr-un API REST (de obicei încărcări utile formatate JSON prin HTTP). Containerele Docker sunt ideale pentru acest tip de arhitectură. Puteți împacheta „microserviciul” frontend într-un container Docker, baza de date intră într-un altul și așa mai departe și așa mai departe. Fiecare serviciu vorbește cu altul printr-un API REST predefinit în loc să fie un monolit scris ca o singură bucată de software.

Dacă trebuie să implementați o nouă funcționalitate sau o caracteristică, de exemplu, un motor de analiză, puteți scrie pur și simplu un microserviciu nou pentru aceasta și ar consuma date prin intermediul API-ului REST expus de diferitele microservicii ale aplicației dvs. web. Și pe măsură ce funcționalitatea dvs. crește în timp, această listă de microservicii va crește și odată cu aceasta.







Nu doriți să implementați fiecare container individual, să îl configurați și apoi să configurați orice altceva pentru a vorbi și cu acesta. Acest lucru va deveni obositor cu chiar și trei containere. Docker-Compose vă permite să automatizați implementarea mai multor containere.



Docker-Compose este unul dintre cele mai simple instrumente care vă ajută să transformați ideea abstractă a microserviciilor într-un set funcțional de container Docker.



Sisteme distribuite

Acum, că am împărțit aplicația web în mai multe containere, nu are prea mult sens să le păstrăm pe toate pe un singur server (mai rău încă pe o singură mașină virtuală!), Acolo unde intră în joc servicii precum Docker Swarm și Kubernetes.





Docker Swarm vă permite să rulați mai multe replici ale aplicației dvs. pe mai multe servere. Dacă microserviciul dvs. este scris într-un mod în care poate fi scalat „orizontal”, atunci puteți utiliza Docker Swarm pentru a implementa aplicația dvs. web în mai multe centre de date și regiuni multiple. Aceasta oferă rezistență împotriva eșecului unuia sau mai multor centre de date sau legături de rețea. Acest lucru se face de obicei folosind o subcomandă în Docker, adică Docker Stack.

The Stiva Docker subcomanda se comportă mult mai mult ca comanda Docker-Compose și asta poate duce la concepții greșite pentru cineva care utilizează oricare dintre tehnologii.



Sursa confuziei

În ceea ce privește utilizarea și fluxul de lucru, ambele tehnologii funcționează foarte asemănătoare, ceea ce provoacă confuzie. Modul în care îți implementezi aplicația utilizând fie Docker Swarm, fie Docker-Compose este foarte similar. Vă definiți aplicația într-un fișier YAML, acest fișier va conține numele imaginii, configurația pentru fiecare imagine și, de asemenea, scala (numărul de replici) pe care fiecare microserviciu va trebui să o îndeplinească în implementare.

Diferența constă în principal în backend, unde docker-compose implementează containerul pe o singură gazdă Docker, Docker Swarm îl implementează pe mai multe noduri. Vorbind liber, poate face totuși cele mai multe lucruri pe care le poate compune docker, dar îl scalează pe mai multe gazde Docker.

Asemănări

Atât Docker Swarm, cât și Docker-Compose au următoarele asemănări:

  1. Amândoi iau definiții formatate YAML ale stivei de aplicații.
  2. Ambele sunt menite să facă față aplicațiilor cu mai multe containere (microservicii)
  3. Ambele au un parametru de scară care vă permite să rulați mai multe containere cu aceeași imagine, permițând microserviciului să se scaleze orizontal.
  4. Ambele sunt întreținute de aceeași companie, adică Docker, Inc.

Diferențe

Cele câteva diferențe dintre Docker Swarm și Docker-Compose:

  1. Docker Swarm este folosit pentru a vă scala aplicația web pe unul sau mai multe servere. Unde, ca Docker-compose, va rula pur și simplu aplicația dvs. web pe o singură gazdă Docker.
  2. Scalarea aplicației dvs. web Docker Swarm oferă o disponibilitate ridicată serioasă și toleranță la erori. Scalarea aplicației dvs. web utilizând Docker-Compose pe o singură gazdă este utilă numai pentru testare și dezvoltare.
  3. Docker Swarm și subcomandele conexe, cum ar fi Docker Swarm și Docker Stack, sunt încorporate în Docker CLI în sine. Toate fac parte din binarul Docker pe care îl apelați prin terminalul dvs. Docker-Compose este binar independent în sine.

Un caz de utilizare pentru Docker-Compose

După cum s-a descris mai sus, ambele sunt instrumente complet diferite și fiecare rezolvă o problemă complet diferită, deci nu este ca și cum una ar fi o alternativă pentru cealaltă. Cu toate acestea, pentru a oferi noilor veniți o idee despre ceea ce vorbesc, iată un caz de utilizare pentru Docker Compose.

Să presupunem că doriți să găzduiți un blog WordPress pe un singur server. Configurarea sau menținerea acestuia nu este ceva ce doriți să faceți, manual, deci ceea ce ați face în schimb este să instalați Docker și Docker-compose pe VPS-ul dvs., creați un fișier YAML simplu care definește toate aspectele diferite ale stivei dvs. WordPress, ca mai jos, :

Notă: Dacă utilizați cele de mai jos pentru a implementa un site WordPress, vă rugăm să schimbați toate parolele în ceva sigur. Mai bine, folosiți Docker Secrets pentru a stoca date sensibile precum parole, în loc să le aveți într-un fișier text simplu.

versiune:„3”

Servicii:
db:
imagine: mysql:5.7
volume:
- db_data:/Unde/lib/mysql
reporniți: întotdeauna
mediu inconjurator:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress

wordpress:
depinde de:
- db
imagine: wordpress: ultima
porturi:
-„8000: 80”
reporniți: întotdeauna
mediu inconjurator:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpressPassword
WORDPRESS_DB_NAME: wordpress
volume:
db_data:{}

Odată ce fișierul este creat și ambele Docker și Docker-compose sunt instalate, tot ce trebuie să faceți este să rulați:

$docker-compune-d

Și site-ul dvs. va fi funcțional. Dacă există o actualizare, executați:

$docker-compune în jos

Apoi aruncați vechile imagini Docker și executați comanda docker-compose up -d, iar imaginile noi vor fi trase automat. Deoarece aveți datele persistente stocate într-un volum Docker, conținutul site-ului dvs. web nu va fi pierdut.

Când utilizați Docker Swarm

În timp ce Docker-compose este mai mult un instrument de automatizare, Docker Swarm este destinat aplicațiilor mai solicitante. Aplicații web cu sute sau mii de utilizatori sau sarcină de lucru care trebuie scalată în paralel. Companiile cu o bază mare de utilizatori și cerințe SLA stricte ar dori să utilizeze un sistem distribuit precum Docker Swarm. Dacă aplicația dvs. rulează pe mai multe servere și mai multe centre de date, atunci șansele de nefuncționare datorate unei conexiuni DC sau de rețea afectate se reduc semnificativ.

Acestea fiind spuse, ezit să recomand Docker Swarm pentru cazuri de utilizare a producției, deoarece tehnologiile concurente precum Kubernetes sunt, fără îndoială, mai potrivite pentru această sarcină. Kubernetes este acceptat în mod nativ de la mulți furnizori de cloud și funcționează destul de bine cu Docker Containers, astfel încât nici măcar nu trebuie să vă reconstruiți aplicația pentru a profita de Kubernetes.

Concluzie

Sper că această dezvăluire pe Docker și proiectele sale de satelit a fost informativă și că sunteți mai pregătiți pentru ecosistemul docker.