GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Nutzen Sie die Container-Orchestrierung in diesem Docker Swarm-Tutorial

Haben Sie sich jemals gefragt, ob es möglich ist, Container direkt mit Docker statt mit Kubernetes zu orchestrieren? Docker Swam könnte die Lösung sein, nach der Sie suchen, und Sie sind auf dem richtigen Weg!

In diesem Tutorial erfahren Sie, wie Sie mehrere Docker-Container mit Docker Swarm verwalten.

Lesen Sie weiter und beginnen Sie mit der Orchestrierung!

Voraussetzungen

Dieses Tutorial wird eine praktische Demonstration sein. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie Folgendes haben:

  • Drei EC2-Instanzen, die auf Ubuntu 20.04.3 LTS ausgeführt werden.
  • Docker auf allen EC2-Instances installiert – Dieses Tutorial verwendet Version 20.10.12.

Bauen und Bereitstellen von Containern für einen Docker-Schwarm

Docker Swarm ist ein virtueller oder physischer Maschinencluster, der Docker-Anwendungen ausführt. Der Schwarmmodus bietet Docker integrierte Funktionen zur Container-Orchestrierung.

Aber bevor Sie mit der Verwaltung mehrerer Container beginnen können, benötigen Sie verschiedene Systeme/Maschinen (AWS EC2-Instanzen).

Sie können die Schlüsselkonzepte im Schwarmmodus lernen, bevor Sie mit dem Tutorial fortfahren.

Angenommen, Sie haben Ihre EC2-Instances eingerichtet:

1. Öffnen Sie Ihren Webbrowser und melden Sie sich bei Ihrem EC2-Dashboard an. Sehen Sie sich die Informationszusammenfassungsseite einer Ihrer EC2-Instances an und notieren Sie sich die öffentliche IPv4-Adresse, wie unten gezeigt.

2. Öffnen Sie als Nächstes Ihr Terminal und führen Sie den folgenden Befehl aus, um einen Manager-Knoten in einer Ihrer EC2-Instanzen zu erstellen. Stellen Sie sicher, dass Sie 18.237.102.75 ersetzen mit der zuvor notierten öffentlichen IPv4-Adresse Ihrer EC2-Instance (Schritt eins). Der folgende Befehl initialisiert die Instanz als Docker-Swarm-Manager-Knoten.

Ein Manager-Knoten weist Tasks/Containern IP-Adressen zu, weist Knoten Tasks zu und gibt Befehle für die Ausführung von Worker-Knoten aus.

Der Managerknoten führt die Orchestrierungs- und Clusterverwaltungsfunktionen von Docker Swarm aus. Aber keine Sorge. Im weiteren Verlauf dieses Tutorials werden Sie mehr über Worker-Knoten erfahren.

sudo docker swarm init --advertise-addr 18.237.102.75

Beachten Sie den unten gezeigten ähnlichen Befehl.

3. Führen Sie den zuvor notierten Befehl aus (Schritt zwei), um dem Schwarm als Worker-Knoten beizutreten. Ein Worker-Knoten empfängt und führt Aufgaben aus, die von Manager-Knoten angewiesen werden.

4. Führen Sie nun den docker node aus Befehl unten, um alle in einem bestimmten Schwarm vorhandenen Knoten zu überprüfen. Beachten Sie, dass nur der Manager-Knoten den folgenden Befehl ausführen kann.

sudo docker node ls

5. Wiederholen Sie Schritt zwei, um einen Manager-Knoten in einer anderen EC2-Instanz zu erstellen.

Wenn Sie Ihr Join-Token nicht mehr haben, können Sie den folgenden Befehl im Manager-Knoten ausführen und das Join-Token anzeigen.

sudo docker swarm join-token worker

6. Führen Sie als Nächstes den folgenden docker service aus Befehl, um den im Docker Swarm verwalteten Dienst zu erstellen. In diesem Tutorial stellen Sie ein einfaches NGINX-Image bereit.

Der docker service Der folgende Befehl führt Folgendes aus:

  • Erstellen Sie einen Dienst mit dem Namen (--name ) nginx-service , aber jeder Name funktioniert.
  • Geben Sie die Anzahl der --replicas an Ihrer gewünschten Anwendung/Container. In diesem Fall wird der Replikatwert auf drei gesetzt (3 ). Replikate bieten eine hohe Verfügbarkeit Ihrer Anwendung und eliminieren Ausfallzeiten. Docker teilt die Replikate unter den drei verfügbaren Knoten, wenn Replikate für den Dienst erstellt werden.
  • Geben Sie den Port an (-p 80:80 ), geben Sie dann den Namen des zu verwendenden Bildes an (nginx:latest ).
sudo docker service create --name nginx-service --replicas 3 -p 80:80 nginx:latest

7. Führen Sie den folgenden Befehl aus, um den zuvor erstellten Dienst (nginx-service) zu bestätigen (Schritt 6).

sudo docker service ls

8. Wechseln Sie nun zu jedem Knoten und führen Sie den folgenden Befehl aus, um die verfügbaren Container aufzulisten.

sudo docker ps

Sie sehen eine Replik des Containers, den Sie für jeden Knoten erstellt haben, wie unten gezeigt.

9. Rufen Sie schließlich die IP-Adressen für jede der EC2-Instances ab und navigieren Sie in Ihrem bevorzugten Webbrowser zu ihnen.

Auf ähnliche Weise können Sie unten überprüfen, ob jede Instanz ein Replikat Ihrer Anwendung enthält.

Bereitstellen und Skalieren einer Anwendung mit mehreren Diensten

Sie haben einen einzelnen Dienst bereitgestellt, aber wie würden Sie eine Anwendung mit mehreren Diensten bereitstellen? Docker Swarm kann auch die Arbeit erledigen. Sie verwenden die stack deploy Befehl, der die Anweisungen in einer von Ihnen zu erstellenden YAML-Datei verwendet.

1. Öffnen Sie den Manager-Knoten und erstellen Sie eine YAML-Datei in Ihrem bevorzugten Texteditor. Sie können die Datei anders benennen, aber für diese Demo heißt die Datei Dateiname.yml .

Füllen Sie die Datei file-name.yml aus Datei mit dem folgenden Code, der zwei Dienste mit NGINX- und Ubuntu-Images erstellt.

version: '3.3' # version of compose file
services:
  service1:
    image: 'nginx:latest' # latest version of NGINX image on Docker hub
    ports:
      - '8000:8080'
  service2:
    image: 'ubuntu' # Ubuntu image on docker hub

2. Führen Sie als Nächstes den docker stack aus Befehl unten zum deploy die von file-name.yml erstellten Dienste Datei an Docker Swarm. Der new-stack Der Parameter ist beliebig und benennt den Stack, den der Befehl für die Dienste erstellt.

sudo docker stack deploy -c file-name.yml new-stack

3. Führen Sie den folgenden Befehl aus, um die verfügbaren Dienste aufzulisten, und notieren Sie sich den Namen des gewünschten Dienstes.

sudo docker service ls

4. Führen Sie nun den folgenden Befehl aus, um Replikate für Ihren Stack zu erstellen. Vier (4 ) Replikate, um genau zu sein für diese Demo. Der Manager-Knoten weist zu, welche Knoten die Replikate enthalten.

Die Anwendung, die Sie zuvor in Docker Swarm bereitgestellt haben (Schritt zwei), hat nur ein Replikat, das vom Manager-Knoten verwaltet wird. Um einen Dienst zu skalieren, erstellen Sie vier Replikate dieses Dienstes. Da Sie nur drei Knoten haben, verarbeitet ein Knoten zwei Reproduktionen, während die restlichen Knoten jeweils eine verarbeiten.

Sie können einen Dienst auch herunterskalieren, indem Sie die Anzahl der Replikate reduzieren.

sudo docker service scale new-stack_service1=4

5. Führen Sie schließlich den folgenden Docker-Dienstbefehl aus, um alle Container anzuzeigen, die derzeit die Replikate von new-stack_service1 verarbeiten Service.

sudo docker service ps new-stack_service1

Beachten Sie in der Abbildung unten, dass ein Knoten zwei Replikate verarbeitet.

Aktualisierungsdienst in Swarm

Sie haben bereits gelernt, wie man Dienste bereitstellt, aber wissen Sie, dass es möglich ist, Dienste zu aktualisieren? Vielleicht möchten Sie eine ältere Version eines Dienstes testen. Wenn ja, verwenden Sie das update tag und --image Flag, um die Version des gewünschten Dienstes anzugeben, und geben Sie dann den Namen des zu aktualisierenden Dienstes an.

1. Führen Sie den folgenden Befehl aus, um die Details des derzeit ausgeführten Dienstes zu überprüfen.

sudo docker service inspect --pretty nginx-service

Unten können Sie sehen, dass NGINX auf der neuesten Version ausgeführt wird Ausführung.

2. Führen Sie nun den folgenden Befehl aus, wenn Sie es vorziehen, im aktuell ausgeführten Dienst (nginx-service) auf eine andere Version von NGINX zu wechseln/aktualisieren ) zum Prüfen. Stellen Sie sicher, dass Sie nginx:1.20 ersetzen mit Ihrer bevorzugten Version.

sudo docker service update --image nginx:1.20 nginx-service

3. Führen Sie abschließend den folgenden Befehl wie zuvor (Schritt 1) ​​erneut aus, um die Details des laufenden Dienstes zu überprüfen.

sudo docker service inspect --pretty nginx-service

Beachten Sie unten, dass der laufende Dienst erfolgreich aktualisiert wurde.

Aktualisierung der Knotenverfügbarkeit

Möglicherweise möchten Sie an einem bestimmten Worker-Knoten arbeiten, um vielleicht einige Änderungen am Container vorzunehmen, aber Sie möchten, dass Ihre Anwendung live ist. Wie? Während Sie an diesem Knoten arbeiten, drain Sie ihn diesem Knoten, sodass er keine Aufgaben vom Manager-Knoten erhält.

Neben dem drain Befehl, müssen Sie das update hinzufügen Tag und --availability Flag, um die Verfügbarkeit eines bestimmten Knotens zu ändern.

1. Führen Sie den docker node aus Befehl unten, um verfügbare Knoten aufzulisten und die ID Ihres Zielknotens zu notieren.

sudo docker node ls

2. Führen Sie als Nächstes den folgenden Befehl aus, um --availability zu ändern des Knotens durch Drainage (drain ). Ersetzen Sie kseh5660n8xb3i2ojidzx0x13 mit der ID Ihres Zielknotens, die Sie sich in Schritt 1 notiert haben.

sudo docker node update --availability drain kseh5660n8xb3i2ojidzx0x13

3. Führen Sie abschließend den docker erneut aus Befehl unten, wie Sie es in Schritt 1 getan haben, um verfügbare Knoten aufzulisten. sudo docker node ls

sudo docker node ls

Unten sehen Sie, dass sich die Verfügbarkeit des ausgewählten Knotens geändert hat (Drain ), sodass der Knoten nicht an Aktivitäten im Schwarm teilnimmt.

Schlussfolgerung

In diesem Tutorial haben Sie gelernt, wie Sie die Container-Orchestrierung mit Docker Swarm nutzen können. Sie haben grundlegende Kenntnisse über das Skalieren einer Anwendung mit mehreren Diensten und das Ausführen von Operationen bei der Arbeit mit Docker Swarm erworben.

An dieser Stelle wissen Sie bereits, wie Sie Ihren Docker-Container und -Dienste in Docker Swarm verwalten. Wie planen Sie also, dieses neu gewonnene Wissen in Ihre zukünftigen Container-Orchestrierungen zu integrieren? Vielleicht beginnen Sie mit der Bereitstellung von Django-Anwendungen mit Docker Swarm?


Docker
  1. Einige DOCKER-Befehle

  2. Eine Einführung in Docker

  3. So führen Sie MySQL in einem Docker-Container aus

  4. Wie man SSH in einen Docker-Container einfügt

  5. So weisen Sie einem Docker-Container eine statische IP zu

Nutzen Sie Docker mit dieser MERN-Stack-Tutorial-Lösung

Tutorial „Erste Schritte mit Azure Docker“.

So richten Sie einen Apache Docker-Container ein

So führen Sie Docker-Container aus

Was tun, wenn ein Docker-Container sofort beendet wird

Erstellen Sie einen einfachen Node.js-Hello-World-Docker-Container von Grund auf neu