Docker Compose vs Docker Swarm

Docker Compose Vs Docker Swarm



Dzięki kontenerowej „rewolucji” aplikacje stały się znacznie więcej niż tylko bazą danych i frontendem. Aplikacje są podzielone na różne mikrousługi i zazwyczaj komunikują się ze sobą za pośrednictwem interfejsu API REST (zazwyczaj ładunki w formacie JSON przez HTTP). Kontenery Docker idealnie nadają się do tego rodzaju architektury. Możesz spakować „mikrousługę” frontendu do kontenera Dockera, baza danych trafia do innego i tak dalej i tak dalej. Każda usługa komunikuje się z inną za pośrednictwem wstępnie zdefiniowanego interfejsu API REST, zamiast być monolitem napisanym jako pojedynczy element oprogramowania.

Jeśli potrzebujesz zaimplementować nową funkcjonalność lub funkcję, np. silnik analityczny, możesz po prostu napisać w tym celu nową mikrousługę, która zużyje dane za pośrednictwem interfejsu API REST udostępnianego przez różne mikrousługi Twojej aplikacji internetowej. Wraz ze wzrostem funkcjonalności wraz z upływem czasu ta lista mikroserwisów również będzie się powiększać.







Nie chcesz wdrażać każdego pojedynczego kontenera, konfigurować go, a następnie konfigurować wszystko inne, aby również z nim rozmawiać. To będzie nużące nawet przy trzech pojemnikach. Docker-Compose pozwala zautomatyzować wdrażanie wielu kontenerów.



Docker-Compose to jedno z najprostszych narzędzi, które pomaga przekształcić abstrakcyjną ideę mikrousług w funkcjonalny zestaw kontenera Docker.



Systemy rozproszone

Teraz, gdy podzieliliśmy otwartą aplikację internetową na wiele kontenerów, nie ma sensu trzymać ich wszystkich na jednym serwerze (co gorsza na jednej maszynie wirtualnej!), gdzie do gry wkraczają usługi takie jak Docker Swarm i Kubernetes.





Docker Swarm umożliwia uruchamianie wielu replik Twojej aplikacji na wielu serwerach. Jeśli Twoja mikrousługa jest napisana w taki sposób, że można ją skalować „w poziomie”, możesz użyć Docker Swarm do wdrożenia aplikacji internetowej w wielu centrach danych i wielu regionach. Zapewnia to odporność na awarie jednego lub więcej centrów danych lub łączy sieciowych. Zwykle odbywa się to za pomocą podkomendy w Docker, czyli stosu Docker.

ten Stos Dockera podkomenda zachowuje się znacznie bardziej jak polecenie Docker-Compose, co może prowadzić do nieporozumień u kogoś, kto korzysta z którejkolwiek z technologii.



Źródło zamieszania

Pod względem użytkowania i przepływu pracy obie technologie działają bardzo podobnie, co powoduje zamieszanie. Sposób wdrażania aplikacji przy użyciu Docker Swarm lub Docker-Compose jest bardzo podobny. Zdefiniujesz swoją aplikację w pliku YAML, ten plik będzie zawierał nazwę obrazu, konfigurację dla każdego obrazu, a także skalę (liczbę replik), którą każda mikrousługa będzie musiała spełnić podczas wdrażania.

Różnica polega głównie na zapleczu, gdzie docker-compose wdraża kontener na jednym hoście Docker, a Docker Swarm wdraża go na wielu węzłach. Mówiąc ogólnie, nadal może robić większość rzeczy, które potrafi docker-compose, ale skaluje to na wielu hostach Dockera.

Podobieństwa

Zarówno Docker Swarm, jak i Docker-Compose mają następujące podobieństwa:

  1. Obydwa przyjmują sformatowane w YAML definicje stosu aplikacji.
  2. Oba są przeznaczone do obsługi aplikacji wielokontenerowych (mikrousług)
  3. Oba mają parametr scale, który umożliwia uruchamianie wielu kontenerów tego samego obrazu, umożliwiając skalowanie mikrousługi w poziomie.
  4. Oba są utrzymywane przez tę samą firmę, tj. Docker, Inc.

Różnice

Kilka różnic między Docker Swarm a Docker-Compose:

  1. Docker Swarm służy do skalowania aplikacji internetowej na co najmniej jednym serwerze. Gdzie jako Docker-compose po prostu uruchomi Twoją aplikację internetową na jednym hoście Docker.
  2. Skalowanie aplikacji internetowej Docker Swarm zapewnia wysoką dostępność i odporność na błędy. Skalowanie aplikacji sieci Web przy użyciu Docker-Compose na jednym hoście jest przydatne tylko do testowania i programowania.
  3. Docker Swarm i powiązane podkomendy, takie jak Docker Swarm i Docker Stack, są wbudowane w sam interfejs wiersza polecenia platformy Docker. Wszystkie są częścią pliku binarnego Dockera, który wywołujesz za pośrednictwem terminala. Docker-Compose jest samodzielnym plikiem binarnym.

Przypadek użycia dla Docker-Compose

Jak opisano powyżej, oba są zupełnie różnymi narzędziami i każde rozwiązuje zupełnie inny problem, więc nie jest tak, że jedno jest alternatywą dla drugiego. Jednak, aby dać nowicjuszom poczucie tego, o czym mówię, oto przykład użycia Docker Compose.

Załóżmy, że chcesz samodzielnie hostować blog WordPress na jednym serwerze. Konfigurowanie lub utrzymywanie go nie jest czymś, co chcesz robić ręcznie, więc zamiast tego byś zainstaluj Docker i Docker-compose na swoim VPS, utwórz prosty plik YAML definiujący wszystkie różne aspekty twojego stosu WordPress, jak poniżej, :

Uwaga: jeśli korzystasz z poniższych instrukcji, aby wdrożyć witrynę WordPress, zmień wszystkie hasła na coś bezpiecznego. Co więcej, użyj Docker Secrets do przechowywania poufnych danych, takich jak hasła, zamiast przechowywać je w zwykłym pliku tekstowym.

wersja:„3”

usługi:
db:
obraz: mysql:5,7
wolumeny:
- db_dane:/gdzie/lib/mysql
restart: zawsze
środowisko:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress

wordpress:
zależy od:
- db
obraz: wordpress: najnowszy
porty:
-'8000: 80'
restart: zawsze
środowisko:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpressPassword
WORDPRESS_DB_NAME: wordpress
wolumeny:
baza_danych:{}

Po utworzeniu pliku i zainstalowaniu zarówno Docker, jak i Docker-compose wystarczy uruchomić:

$docker-compose up-D

Twoja witryna będzie działać. Jeśli jest aktualizacja, uruchom:

$docker-compose down

Następnie wyrzuć stare obrazy Dockera i uruchom polecenie docker-compose up -d, a nowe obrazy zostaną automatycznie wciągnięte. Ponieważ masz trwałe dane przechowywane w wolumenie Docker, zawartość Twojej witryny nie zostanie utracona.

Kiedy używać Docker Swarm

Podczas gdy Docker-compose jest bardziej narzędziem do automatyzacji, Docker Swarm jest przeznaczony dla bardziej wymagających aplikacji. Aplikacje internetowe z setkami lub tysiącami użytkowników lub obciążeniem, które należy skalować równolegle. Firmy z dużą bazą użytkowników i rygorystycznymi wymaganiami SLA chciałyby korzystać z systemu rozproszonego, takiego jak Docker Swarm. Jeśli Twoja aplikacja działa na wielu serwerach i wielu centrach danych, szanse na przestoje spowodowane wadliwym DC lub łączem sieciowym znacznie się zmniejszają.

To powiedziawszy, waham się polecić Docker Swarm do zastosowań produkcyjnych, ponieważ konkurencyjne technologie, takie jak Kubernetes, prawdopodobnie lepiej nadają się do tego zadania. Kubernetes jest obsługiwany natywnie przez wielu dostawców chmury i całkiem dobrze współpracuje z kontenerami Docker, więc nie musisz nawet przebudowywać swojej aplikacji, aby skorzystać z Kubernetes.

Wniosek

Mam nadzieję, że ta wędrówka po Dockerze i jego projektach satelitarnych była pouczająca i jesteś bardziej przygotowany na ekosystem dockera.