Docker
Docker-Schwarm-Modus
Suche…
Einführung
Ein Schwarm ist eine Reihe von Docker Engines (oder Knoten ), die Dienste gemeinsam bereitstellen. Swarm wird verwendet, um die Verarbeitung auf viele physische, virtuelle oder Cloud-Maschinen zu verteilen.
Syntax
Initialisieren eines Schwarms : Docker-Schwarm-Init [OPTIONEN]
Treten Sie einem Knoten als Knoten und / oder Manager bei : Docker-Schwarm tritt [OPTIONS] HOST: PORT bei
Erstellen Sie einen neuen Dienst : Andockdienst Erstellen Sie [OPTIONEN] IMAGE [BEFEHL] [ARG ...].
Anzeigen detaillierter Informationen zu einem oder mehreren Diensten : Andockdienst prüfen [OPTIONEN] SERVICE [SERVICE ...]
Liste Dienste : Docker Service ls [Optionen]
Entfernen Sie einen oder mehrere Dienste : docker service rm SERVICE [SERVICE ...]
Skalieren Sie einen oder mehrere replizierte Dienste : Dockerservicemaßstab SERVICE = REPLICAS [SERVICE = REPLICAS ...]
Auflisten der Aufgaben eines oder mehrerer Dienste : Andockdienst ps [OPTIONEN] SERVICE [SERVICE ...]
Aktualisieren Sie einen Service : Docker-Service-Update [OPTIONEN] SERVICE
Bemerkungen
Der Schwarmmodus implementiert die folgenden Funktionen:
- Cluster-Management in Docker Engine integriert
- Dezentrales Design
- Deklaratives Servicemodell
- Skalieren
- Gewünschter Staatenabgleich
- Multi-Host-Netzwerk
- Service Discovery
- Lastverteilung
- Standardmäßig sicheres Design
- Aktualisierungen
Weitere offizielle Docker-Dokumentation zu Swarm finden Sie unter: Swarm-Modusübersicht
CLI-Befehle für den Schwarmmodus
Klicken Sie zur Beschreibung auf die Befehlsbeschreibung
docker swarm init [OPTIONS]
Treten Sie einem Knoten als Knoten und / oder Manager bei
docker swarm join [OPTIONS] HOST:PORT
Erstellen Sie einen neuen Dienst
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
Detaillierte Informationen zu einem oder mehreren Diensten anzeigen
docker service inspect [OPTIONS] SERVICE [SERVICE...]
docker service ls [OPTIONS]
Entfernen Sie einen oder mehrere Dienste
docker service rm SERVICE [SERVICE...]
Skalieren Sie einen oder mehrere replizierte Dienste
docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
Listen Sie die Aufgaben eines oder mehrerer Dienste auf
docker service ps [OPTIONS] SERVICE [SERVICE...]
Aktualisieren Sie einen Dienst
docker service update [OPTIONS] SERVICE
Erstellen Sie einen Schwarm unter Linux mit Docker-Machine und VirtualBox
# Create the nodes
# In a real world scenario we would use at least 3 managers to cover the fail of one manager.
docker-machine create -d virtualbox manager
docker-machine create -d virtualbox worker1
# Create the swarm
# It is possible to define a port for the *advertise-addr* and *listen-addr*, if none is defined the default port 2377 will be used.
docker-machine ssh manager \
docker swarm init \
--advertise-addr $(docker-machine ip manager)
--listen-addr $(docker-machine ip manager)
# Extract the Tokens for joining the Swarm
# There are 2 different Tokens for joining the swarm.
MANAGER_TOKEN=$(docker-machine ssh manager docker swarm join-token manager --quiet)
WORKER_TOKEN=$(docker-machine ssh manager docker swarm join-token worker --quiet)
# Join a worker node with the worker token
docker-machine ssh worker1 \
docker swarm join \
--token $WORKER_TOKEN \
--listen-addr $(docker-machine ip worker1) \
$(docker-machine ip manager):2377
Finde heraus, wie Arbeiter und Manager Token beitreten
Wenn Sie die Bereitstellung neuer Knoten für einen Schwarm automatisieren, müssen Sie wissen, was der richtige Join-Token für den Schwarm ist, sowie die angegebene Adresse des Managers. Sie können dies herausfinden, indem Sie die folgenden Befehle auf einem der vorhandenen Managerknoten ausführen:
# grab the ipaddress:port of the manager (second last line minus the whitespace)
export MANAGER_ADDRESS=$(docker swarm join-token worker | tail -n 2 | tr -d '[[:space:]]')
# grab the manager and worker token
export MANAGER_TOKEN=$(docker swarm join-token manager -q)
export WORKER_TOKEN=$(docker swarm join-token worker -q)
Die Option -q gibt nur das Token aus. Ohne diese Option erhalten Sie den vollständigen Befehl zur Registrierung bei einem Schwarm.
Auf neu bereitgestellten Knoten können Sie dann mit dem Schwarm beitreten.
docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS
Hallo Weltanwendung
Normalerweise möchten Sie einen Stapel von Services erstellen, um eine replizierte und orchestrierte Anwendung zu bilden.
Eine typische moderne Webanwendung besteht aus Datenbank, API, Frontend und Reverse Proxy.
Beharrlichkeit
Die Datenbank benötigt Persistenz, daher benötigen wir ein Dateisystem, das von allen Knoten eines Schwarms gemeinsam genutzt wird. Es kann sich dabei um NAS, NFS-Server, GFS2 oder etwas anderes handeln. Das Einrichten ist hier nicht möglich. Momentan enthält Docker keine Persistenz in einem Schwarm und verwaltet diese auch nicht. In diesem Beispiel wird davon /nfs/
dass /nfs/
shared location auf allen Knoten bereitgestellt ist.
Netzwerk
Um miteinander kommunizieren zu können, müssen sich Dienste in einem Schwarm im selben Netzwerk befinden.
Wählen Sie einen IP-Bereich (hier 10.0.9.0/24
) und den Netzwerknamen ( hello-network
) und führen Sie einen Befehl aus:
docker network create \
--driver overlay \
--subnet 10.0.9.0/24 \
--opt encrypted \
hello-network
Datenbank
Der erste Service, den wir brauchen, ist eine Datenbank. Verwenden wir postgresql als Beispiel. Erstellen Sie einen Ordner für eine Datenbank in nfs/postgres
und führen Sie diesen aus:
docker service create --replicas 1 --name hello-db \
--network hello-network -e PGDATA=/var/lib/postgresql/data \
--mount type=bind,src=/nfs/postgres,dst=/var/lib/postgresql/data \
kiasaki/alpine-postgres:9.5
Beachten Sie, dass wir die Optionen --network hello-network
und --mount
haben.
API
Das Erstellen einer API ist außerhalb des Anwendungsbereichs dieses Beispiels. Nehmen wir also an, Sie haben ein API-Image unter username/hello-api
.
docker service create --replicas 1 --name hello-api \
--network hello-network \
-e NODE_ENV=production -e PORT=80 -e POSTGRESQL_HOST=hello-db \
username/hello-api
Beachten Sie, dass wir einen Namen unseres Datenbankdienstes übergeben haben. Der Docker-Schwarm verfügt über einen integrierten Round-Robin-DNS-Server, sodass die API unter Verwendung ihres DNS-Namens eine Verbindung zur Datenbank herstellen kann.
Reverse Proxy
Lassen Sie uns einen Nginx-Service erstellen, um unsere API für eine äußere Welt bereitzustellen. Erstellen Sie Nginx-Konfigurationsdateien an einem freigegebenen Speicherort und führen Sie Folgendes aus:
docker service create --replicas 1 --name hello-load-balancer \
--network hello-network \
--mount type=bind,src=/nfs/nginx/nginx.conf,dst=/etc/nginx/nginx.conf \
-p 80:80 \
nginx:1.10-alpine
Beachten Sie, dass wir die Option -p
, um einen Port zu veröffentlichen. Dieser Port steht jedem Knoten in einem Schwarm zur Verfügung.
Verfügbarkeit der Knoten
Verfügbarkeit des Schwarmmodusknotens:
- Aktiv bedeutet, dass der Scheduler einem Knoten Aufgaben zuweisen kann.
- Pause bedeutet, dass der Scheduler dem Knoten keine neuen Aufgaben zuweist, aber vorhandene Aufgaben bleiben aktiv.
- Entleeren bedeutet, dass der Scheduler dem Knoten keine neuen Aufgaben zuweist. Der Scheduler fährt alle vorhandenen Aufgaben herunter und plant sie auf einem verfügbaren Knoten.
So ändern Sie die Verfügbarkeit des Modus:
#Following commands can be used on swarm manager(s)
docker node update --availability drain node-1
#to verify:
docker node ls
Schwarmknoten fördern oder herabstufen
Führen Sie zum docker node promote
eines Knotens oder einer Knotengruppe einen docker node promote
von einem Managerknoten aus aus:
docker node promote node-3 node-2
Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.
Führen Sie zum Herabstufen eines Knotens oder einer Gruppe von Knoten einen docker node demote
von einem Manager-Knoten aus aus:
docker node demote node-3 node-2
Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.
Den Schwarm verlassen
Arbeiterknoten:
#Run the following on the worker node to leave the swarm.
docker swarm leave
Node left the swarm.
Wenn der Knoten die Manager- Rolle hat, erhalten Sie eine Warnung, dass das Quorum der Manager beibehalten wird. Sie können --force verwenden, um auf dem Manager-Knoten zu bleiben:
#Manager Node
docker swarm leave --force
Node left the swarm.
Knoten, die den Swarm verlassen haben, werden weiterhin in der Ausgabe des docker node ls
.
So entfernen Sie Knoten aus der Liste:
docker node rm node-2
node-2