Multi-Tier-Applikationen mit Docker Compose, Machine und Swarm
Seite 4: Docker Swarm
Schwarmintelligenz: Cluster bauen mit Swarm
Die Software Swarm ermöglicht Nutzern auf einfache Art, mehrere Docker Hosts zu einem Cluster zusammenzufügen. Der Clou an Swarm ist, dass es sich wie ein Docker-Daemon verhält. Anwender können Swarm problemlos im Zusammenhang mit anderen Werkzeugen benutzen, die auf die Docker-API zurückgreifen wie Docker Compose, Dokku, Shipyard, Deis und natürlich Docker selbst. Swarm ist aktuell noch Beta-Software, und auch die Integration in andere Werkzeuge wie docker-machine ist noch recht frisch. Trotzdem funktioniert es ausgesprochen gut.
Ein Swarm-Cluster besteht aus einem Manager (auch Master genannt) und beliebig vielen Slaves. Der Swarm-Manager kümmert sich um das Scheduling von Containern auf allen Slaves und ist die primäre Schnittstelle für die Benutzer, um auf Ressourcen im Cluster zuzugreifen.
Implementierung eines Schwarms
Anwender können die in Go implementierte Swarm-Applikation entweder aus den Quellen übersetzen oder direkt in Form eines Docker-Images beziehen. Die Ausführung mittels Docker ist die bevorzugte Methode.
Damit Swarm funktioniert, mĂĽssen die Anwender folgende Vorkehrungen treffen:
- Sie mĂĽssen auf allen beteiligten Knoten Docker installieren.
- Jeder Docker-Daemon muss aus dem Netz direkt erreichbar sein (TCP).
- Zur Erhöhung der Sicherheit sollten die Nutzer eine SSL/TLS-CA erzeugen und jeden Docker-Daemon mit einem Zertifikat von dieser CA versorgen, um die TLS-basierte Authentifizierung zu aktivieren. Jeder Knoten zur Administration des Schwarms und jeder Manager benötigen zudem Client-Zertifikate.
- Die Implementierung eines Discovery-Service sorgt dafür, dass sich die Systeme untereinander finden können.
- Auf dem Swarm-Master muss das Swarm-Image im Master/Manager-Modus gestartet werden. Der Swarm-Master ist ein Docker-Host, der auf alle beteiligten Slaves via TCP/IP zugreifen kann.
- SchlieĂźlich mĂĽssen die Nutzer auf jedem Docker-Host das Swarm Image als sogenannten Agenten starten.
Die Liste zeigt, dass die manuelle Implementierung eines Swarm-Clusters nicht trivial und ohne ausfĂĽhrliche Konsultation der Dokumentation und entsprechende Planung nicht realistisch ist.
Glücklicherweise bietet Docker Machine eine Integration von Swarm an. Damit ist die Implementierung eines Schwarms in wenigen einfachen Schritten auf der lokalen Arbeitsstation mit VirtualBox oder einer der vielen von Machine unterstützten Infrastrukturtechniken möglich, wie Beispiel 8 zeigt.
Wer die Implementierung eines eigenen Discovery-Dienstes scheut, kann den im Dockerhub integrierten Service nutzen. Dazu muss der Anwender nur Zugriff auf einen Docker-Host haben und das offizielle Swarm-Image mit dem Kommando create starten. Das erzeugt ein Token, das alle im Schwarm beteiligten Knoten nutzen. Die Knoten benutzen den Dockerhub, um sich untereinander zu finden. Weitere Möglichkeiten zu Discovery-Diensten kommen im Abschnitt über Discovery Services zur Sprache.
Nach der Generierung eines Tokens, können die Anwender Docker Machine instruieren, einen Swarm-Master zu erstellen. Dazu geben sie dem Unterkommando create die Parameter --swarm, --swarm-master und das Token mittels --swarm-discovery mit. Dann sorgt docker-machine neben der eigentlichen Installation und Konfiguration des Docker-Hosts auch für die Konfiguration und den Start des swarm-Dienstes.
Der Befehl docker-machine setzt daraufhin einen oder mehrere Slaves auf. Dazu lässt der Benutzer den Parameter --swarm-master weg. Nach dem Erstellen der Systeme zeigt das Kommando docker-machine ls nicht nur die Systeme selbst an, sondern in einer eigenen Spalte, zu welchem Schwarm sie gehören und welches System der Master ist.
Zum Zugriff auf den Schwarm müssen Anwender docker-machine env mit dem zusätzlichen Parameter --swarm aufrufen, damit die Umgebungsvariable DOCKER_HOST auf den Swarm-Master-Dienst und nicht auf den Docker-Daemon zeigt, der auf dem Swarm Master läuft.
Nun kann mittels des Docker-Kommandozeilenprogramms oder Docker Compose ein Anwendungsfall im Swarm-Cluster ausgefĂĽhrt werden.