Docker Compose vs Docker Swarm

Docker Compose Vs Docker Swarm

Mit der Container-Revolution sind Apps viel mehr geworden, als nur eine Datenbank und ein Frontend zu sein. Anwendungen sind in verschiedene Microservices aufgeteilt und kommunizieren normalerweise über eine REST-API (typischerweise JSON-formatierte Nutzlasten über HTTP). Docker-Container sind ideal für diese Art von Architektur. Sie können Ihren Frontend-Microservice in einen Docker-Container packen, die Datenbank geht in einen anderen und so weiter und so weiter. Jeder Service kommuniziert mit einem anderen über eine vordefinierte REST-API, anstatt ein Monolith zu sein, der als einzelne Software geschrieben wurde.

Wenn Sie eine neue Funktionalität oder ein Feature implementieren müssen, z. B. eine Analyse-Engine, können Sie einfach einen neuen Microservice dafür schreiben und dieser würde Daten über die REST-API verbrauchen, die von den verschiedenen Microservices Ihrer Web-App bereitgestellt wird. Und wenn Ihre Funktionalität im Laufe der Zeit wächst, wird auch diese Liste von Microservices mitwachsen.



Sie möchten nicht jeden einzelnen Container bereitstellen, ihn konfigurieren und dann alles andere so konfigurieren, dass er auch mit ihm kommuniziert. Das wird schon mit drei Containern mühsam. Mit Docker-Compose können Sie die Bereitstellung mehrerer Container automatisieren.



Docker-Compose ist eines der einfachsten Tools, mit dem Sie die abstrakte Idee von Microservices in einen funktionalen Satz von Docker-Containern verwandeln können.



Verteilte Systeme

Nachdem wir die Web-App nun in mehrere Container aufgeteilt haben, macht es wenig Sinn, sie alle auf einem einzigen Server zu halten (schlimmer noch auf einer einzigen virtuellen Maschine!). Hier kommen Dienste wie Docker Swarm und Kubernetes ins Spiel.

Docker Swarm ermöglicht es Ihnen, mehrere Replikate Ihrer Anwendung auf mehreren Servern auszuführen. Wenn Ihr Microservice so geschrieben ist, dass er „horizontal“ skaliert werden kann, können Sie Docker Swarm verwenden, um Ihre Web-App in mehreren Rechenzentren und mehreren Regionen bereitzustellen. Dies bietet Widerstandsfähigkeit gegen den Ausfall eines oder mehrerer Rechenzentren oder Netzwerkverbindungen. Dies geschieht normalerweise mit einem Unterbefehl in Docker, dh Docker Stack.

Die Docker-Stack subcommand verhält sich viel mehr wie der Docker-Compose-Befehl und das kann zu Missverständnissen bei jemandem führen, der eine der Technologien verwendet.



Quelle der Verwirrung

In Bezug auf Nutzung und Workflow funktionieren beide Technologien sehr ähnlich, was zu Verwirrung führt. Die Bereitstellung Ihrer App mit Docker Swarm oder Docker-Compose ist sehr ähnlich. Sie definieren Ihre Anwendung in einer YAML-Datei. Diese Datei enthält den Image-Namen, die Konfiguration für jedes Image und auch den Maßstab (Anzahl der Replikate), den jeder Microservice bei der Bereitstellung erfüllen muss.

Der Unterschied liegt hauptsächlich im Backend, wo docker-compose Container auf einem einzigen Docker-Host bereitstellt, Docker Swarm stellt ihn auf mehreren Knoten bereit. Grob gesagt kann es immer noch die meisten Dinge tun, die docker-compose kann, aber es skaliert es über mehrere Docker-Hosts.

Ähnlichkeiten

Sowohl Docker Swarm als auch Docker-Compose haben die folgenden Gemeinsamkeiten:

  1. Beide verwenden YAML-formatierte Definitionen Ihres Anwendungsstapels.
  2. Beide sind für den Umgang mit Multi-Container-Anwendungen (Microservices) gedacht.
  3. Beide verfügen über einen Skalierungsparameter, mit dem Sie mehrere Container desselben Images ausführen können, sodass Ihr Microservice horizontal skaliert werden kann.
  4. Sie werden beide von derselben Firma verwaltet, d. h. Docker, Inc.

Unterschiede

Die wenigen Unterschiede zwischen Docker Swarm und Docker-Compose:

  1. Docker Swarm wird verwendet, um Ihre Web-App auf einen oder mehrere Server zu skalieren. Wobei Docker-compose Ihre Web-App einfach auf einem einzigen Docker-Host ausführt.
  2. Die Skalierung Ihrer Web-App Docker Swarm bietet ernsthafte Hochverfügbarkeit und Fehlertoleranz. Das Skalieren Ihrer Web-App mit Docker-Compose auf einem einzelnen Host ist nur für Tests und Entwicklung nützlich.
  3. Docker Swarm und verwandte Unterbefehle wie Docker Swarm und Docker Stack sind in die Docker-CLI selbst integriert. Sie sind alle Teil der Docker-Binärdatei, die Sie über Ihr Terminal aufrufen. Docker-Compose ist an und für sich eine eigenständige Binärdatei.

Ein Anwendungsfall für Docker-Compose

Wie oben beschrieben, handelt es sich bei beiden um völlig unterschiedliche Tools und jedes löst ein völlig anderes Problem, sodass es nicht so ist, als wäre das eine eine Alternative zum anderen. Um Neulingen jedoch ein Gefühl dafür zu geben, wovon ich spreche, ist hier ein Anwendungsfall für Docker Compose.

Angenommen, Sie möchten ein WordPress-Blog auf einem einzelnen Server selbst hosten. Es ist nicht etwas, was Sie manuell einrichten oder warten möchten. Sie sollten stattdessen Docker und Docker-compose auf Ihrem VPS installieren und eine einfache YAML-Datei erstellen, die alle verschiedenen Aspekte Ihres WordPress-Stacks definiert, wie unten beschrieben. :

Hinweis: Wenn Sie eine WordPress-Site wie unten beschrieben bereitstellen, ändern Sie bitte alle Passwörter in etwas Sicheres. Besser noch, verwenden Sie Docker Secrets, um sensible Daten wie Passwörter zu speichern, anstatt sie in einer einfachen Textdatei zu speichern.

Ausführung:'3'

Dienstleistungen:
db:
Bild: mysql:5.7
Bände:
- db_data:/wo/lib/mysql
Neustart: immer
Umgebung:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: WordPress
MYSQL_USER: WordPress
MYSQL_PASSWORD: WordPress

WordPress:
kommt drauf an:
- db
Bild: WordPress: neuestes
Häfen:
-'8000: 80'
Neustart: immer
Umgebung:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: WordPress
WORDPRESS_DB_PASSWORD: wordpressPassword
WORDPRESS_DB_NAME: WordPress
Bände:
db_daten:{}

Sobald die Datei erstellt und sowohl Docker als auch Docker-compose installiert sind, müssen Sie nur noch Folgendes tun:

$docker-compose up-D

Und Ihre Website wird betriebsbereit sein. Wenn es ein Update gibt, führen Sie Folgendes aus:

$docker-compose down

Werfen Sie dann die alten Docker-Images weg und führen Sie den Befehl docker-compose up -d aus und neue Images werden automatisch eingezogen. Da Sie die persistenten Daten in einem Docker-Volume gespeichert haben, gehen die Inhalte Ihrer Website nicht verloren.

Wann sollte Docker Swarm verwendet werden?

Während Docker-compose eher ein Automatisierungstool ist, ist Docker Swarm für anspruchsvollere Anwendungen gedacht. Web-Apps mit Hunderten oder Tausenden von Benutzern oder Workloads, die parallel skaliert werden müssen. Unternehmen mit einer großen Benutzerbasis und strengen SLA-Anforderungen möchten ein verteiltes System wie Docker Swarm verwenden. Wenn Ihre App auf mehreren Servern und mehreren Rechenzentren ausgeführt wird, wird die Wahrscheinlichkeit von Ausfallzeiten aufgrund einer betroffenen DC- oder Netzwerkverbindung erheblich reduziert.

Trotzdem zögere ich, Docker Swarm für Produktionsanwendungsfälle zu empfehlen, da konkurrierende Technologien wie Kubernetes für diese Aufgabe wohl besser geeignet sind. Kubernetes wird von vielen Cloud-Anbietern nativ unterstützt und funktioniert recht gut mit Docker-Containern, sodass Sie nicht einmal Ihre App neu erstellen müssen, um Kubernetes zu nutzen.

Abschluss

Ich hoffe, dass diese Ausführungen zu Docker und seinen Satellitenprojekten informativ waren und Sie besser auf das Docker-Ökosystem vorbereitet sind.