Im ersten Artikel „Erstellen eines Docker Swarm-Clusters auf Azure Container Service“ haben wir die Erstellung eines Docker Swarm-Clusters auf Azure Container Service (ACS) besprochen. Auf jeder virtuellen Maschine (Master oder Agent) wird Docker ausgeführt, wenn der Schwarm erstellt wird. In diesem Fortsetzungsartikel besprechen wir die Verwendung von Docker auf dem Swarm, der auf dem Azure Container Service erstellt wurde. Wir werden die Verwendung von sowohl eigenständigem Docker als auch einem Dienst im Docker Swarm-Modus besprechen. Dieser Artikel hat die folgenden Abschnitte:
- Einstellung der Umgebung
- Docker-Informationen auflisten
- Ausführen eines Hello World-Docker-Images
- Ausführen eines Nginx-Docker-Images
- Docker-Container auflisten
- Zugriff auf den Nginx-Docker-Container in einem Browser
- Entfernen eines Docker-Containers
- Initialisieren des Docker Swarm-Modus
- Erstellen eines Docker-Dienstes
- Docker-Dienste auflisten
- Docker-Dienstaufgaben auflisten
- Auflisten von Docker-Containern für den Docker-Dienst
- Durchsuchen von Protokollen, die von einem Docker-Service-Container generiert wurden
- Schlussfolgerung
Einstellung der Umgebung
Verwenden Sie die gleiche Umgebung wie im ersten Artikel „Creating a Docker Swarm Cluster on Azure Container Service“. Erstellen Sie einen Swarm-Cluster auf ACS, wie im Artikel beschrieben. In diesem Artikel verwenden wir den Swarm-Cluster, der aus drei Master-Knoten und einem Agent-Knoten besteht, um einen eigenständigen Docker-Container und einen Docker-Swarm-Modus-Dienst auszuführen.
Docker-Informationen auflisten
Starten Sie Cloud Shell wie im Artikel „Creating a Docker Swarm Cluster on Azure Container Service“ beschrieben. Stellen Sie eine Verbindung zu einer Swarm-Master-VM her, indem Sie einen privaten SSH-RSA-Schlüssel, einen Benutzernamen und eine öffentliche IP-Adresse des Masters verwenden, wie auch im vorherigen Artikel beschrieben. Der SSH-Befehl zum Herstellen einer Verbindung mit der Master-VM lautet wie folgt:der private SSH-RSA-Schlüssel, der Benutzername und die öffentliche IP-Adresse wären für verschiedene Benutzer unterschiedlich.
ssh -i /home/deepak/.ssh/id_rsa -p 2200 [email protected]
Eine Verbindung wird hergestellt und eine Eingabeaufforderung für die Master-VM wird angezeigt.
[email protected]:~$ ssh -i /home/deepak/.ssh/id_rsa -p 2200 [email protected] bei Ubuntu 14.04.4 LTS (GNU/Linux 3.19.0-65-generic x86_64) * Dokumentation:https://help.ubuntu.com/ Systeminformationen Stand Di 10. Okt 22:40:17 UTC 2017 Systemlast:0,27 Prozesse:131 Nutzung von /:4,2 % von 28,80 GB Angemeldete Benutzer:0 Speichernutzung :2 % IP-Adresse für eth0:172.16.0.5 Swap-Nutzung:0 % IP-Adresse für docker0:172.17.0.1 Stellen Sie diese Daten grafisch dar und verwalten Sie dieses System unter:https://landscape.canonical.com/ Holen Sie sich Cloud-Unterstützung mit Ubuntu Advantage Cloud Gast:http://www.ubuntu.com/business/services/cloud Neue Version '16.04.3 LTS' verfügbar. Führen Sie „do-release-upgrade“ aus, um ein Upgrade darauf durchzuführen. Letzte Anmeldung:Dienstag, 10. Oktober, 22:40:17 2017 von 40.78.30.37
In dem im Artikel „Creating a Docker Swarm Cluster on Azure Container Service“ bereitgestellten Swarm wurden drei Masterknoten konfiguriert. Die Anzahl der Master-VMs kann 1, 3 oder 5 betragen. Wenn mehrere Master-VMs ausgeführt werden, ist der SSH-Befehl zum Herstellen einer Verbindung zu jeder der Master-VMs derselbe, mit Ausnahme des SSH-Ports, der 2200 für den 1 Master und 2201 für ist den 2-Master, 2202 für den 3-Master, 2203 für den 4-Master und 2204 für den 5-Master. Bei drei Master-VMs sind die verwendeten SSH-Ports 2200, 2201 und 2202. Um eine Verbindung zu einem 2-Master herzustellen, lautet der SSH-Befehl wie folgt:
[email protected]:~$ ssh -i /home/deepak/.ssh/id_rsa -p 2201 [email protected]
Und der SSH-Befehl zum Verbinden mit dem 2-Master lautet wie folgt:
[email protected]:~$ ssh -i /home/deepak/.ssh/id_rsa -p 2202 [email protected]
Der Docker-Daemon läuft unter 172.16.0.5:2375 . Um systemweite Informationen anzuzeigen, führen Sie docker info aus Befehl. Die (teilweise) Ausgabe des Befehls ist aufgelistet:
[email protected]:~$ docker -H 172.16.0.5:2375 infoContainers:0 Wird ausgeführt:0 Angehalten:0 Gestoppt:0Bilder:0Rolle:primaryStrategy:spreadNodes:1 swarm-agent-D50F2361000001:10.0.0.5:2375Is Manager:false Kernel-Version:3.19.0-65-genericOperating System:linuxArchitecture:amd64CPUs:2Total Memory:7.145GiB
Ein Hello-World-Docker-Image ausführen
Jede der virtuellen Maschinen in einem ACS-Schwarm ist ein Docker-Host, und ein eigenständiger Docker-Container kann auf jeder der Schwarm-VMs ausgeführt werden. Führen Sie als Beispiel das Docker-Image „hello-world“ auf einer Master-VM aus.
[email protected]:~$ docker run hello-worldUnable to find image 'hello-world:latest' locallatest:Pulling from library/hello-world5b0f327be733:Pull completeDigest:sha256:b2ba691d8aac9e5ac3644c0788e3d3823f9e97f757f01d2 Download für hello-world Status:ddc6eb54808 world:latestHallo von Docker! Diese Meldung zeigt, dass Ihre Installation ordnungsgemäß zu funktionieren scheint. Um diese Meldung zu generieren, hat Docker die folgenden Schritte ausgeführt:1. Der Docker-Client hat den Docker-Daemon kontaktiert. 2. Der Docker-Daemon zog das „hello-world“-Image aus dem Docker-Hub. 3. Der Docker-Daemon hat aus diesem Image einen neuen Container erstellt, der die ausführbare Datei ausführt, die die Ausgabe erzeugt, die Sie gerade lesen. 4. Der Docker-Daemon hat diese Ausgabe an den Docker-Client gestreamt, der sie an Ihr Terminal gesendet hat. Um etwas Ehrgeizigeres auszuprobieren, können Sie einen Ubuntu-Container ausführen mit:$ docker run -it ubuntu bashBilder teilen, Workflows automatisieren und mehr mit a kostenlose Docker-ID:https://cloud.docker.com/Weitere Beispiele und Ideen finden Sie unter:https://docs.docker.com/engine/userguide/[email protected]:~$
Das Docker-Image hello-world läuft auf der Swarm-Master-VM und nicht auf dem Swarm. Die Master-VM ist nur eine der VMs im Schwarm. Der Docker Swarm lauscht auf den Endpunkt 172.16.0.5:2375. Um Docker-Container auf dem Swarm auszuführen, muss der Swarm-Endpunkt bereitgestellt werden, wie wir im nächsten Abschnitt besprechen werden. Wenn ein Docker-Container auf einem Swarm ausgeführt wird, weist der Swarm-Master einen Swarm-Agenten zu, auf dem der Docker-Container ausgeführt wird.
Nginx-Docker-Image ausführen
Die Hallo-Welt Das im vorherigen Abschnitt verwendete Docker-Image ist ein sehr einfaches Docker-Image mit wenig Dockerisierung und gibt nur eine Nachricht aus. In diesem Abschnitt führen wir einen eigenständigen Container mit dem Docker-Image nginx aus für einen Nginx-Server. Der folgende Befehl erstellt einen Docker-Container namens hello-nginx und macht Port 80 auf dem Host verfügbar.
docker run --name hello-nginx -d -p 80:80 nginx
Die Ausgabe des docker run Befehl aufgeführt:
[email protected]:~$ docker run --name hello-nginx -d -p 80:80 nginxUnable to find image 'nginx:latest' locallatest:Pulling from library/nginxbc95e04b23c0:Pull complete110767c6efff:Pull completef081e0c4df75:Pull Ferastigest:SHA256:004AC1D5E791E705F12A17C80D7BB1E8F7F01AA7DCA7DEEE 6E65A03465392072STATUS:Downloaded neuer Bild für Nginx:LastDer vorhergehende docker run Der Befehl führt einen Docker-Container auf der Swarm-Master-VM aus. Der Docker-Lauf Der Befehl kann auf dem Swarm ausgeführt werden, indem Sie die Swarm-Endpunkt-IP und den Port wie folgt angeben:
[email protected]:~$ docker -H 172.16.0.5:2375 run --name hello-nginx -d -p 80:80 nginxddcbc335988f7b5dba762b436bfde4c22d01144d67313813ba140a5391bac8dfDocker-Container auflisten
Listen Sie die Docker-Container auf einer Master-VM mit dem docker ps auf Befehl. Das hello-nginx Der Docker-Container wird aufgelistet. Ein Swarm-Manager-Container, der nicht vom Benutzer erstellt wird, sondern ein Systemcontainer ist, wird erstellt, wenn ein Swarm erstellt wird.
Anmerkung des Herausgebers: Bitte beachten Sie, dass viele der folgenden Codeauflistungen zu breit sind, um korrekt angezeigt zu werden. Bitte scrollen Sie das Codefeld nach rechts, um die gesamte Liste anzuzeigen. |
[email protected]:~$ docker psCONTAINER ID IMAGE BEFEHL ERSTELLT STATUS PORTS NAMESb3679edba090 nginx "nginx -g 'daemon..." vor 3 Sekunden Up 2 Sekunden 0.0.0.0:80->80/tcp hello-nginxf82ebb6efa4f swarm:1.1.0 "/swarm manage --r..." vor 5 Minuten Up 3 Minuten 0.0.0.0:2375->2375/tcp container_swarm_1
Die Docker-Container auf dem Swarm-Endpunkt können wie folgt aufgelistet werden:
[email protected]:~$ docker -H 172.16.0.5:2375 ps -aCONTAINER ID IMAGE BEFEHL ERSTELLT STATUS PORTS NAMESddcbc335988f nginx "nginx -g 'daemon..." vor 36 Sekunden Up 35 Sekunden 10.0.0.5:80->80/tcp swarm-agent-D50F2361000001/hello-nginx
Der Docker-Container wird auf einem Swarm-Agenten ausgeführt, wie durch den Docker-Containernamen swarm-agent-D50F2361000001/hello-nginx angegeben .
Zugriff auf den Nginx-Docker-Container in einem Browser
Wie bereits erwähnt, plant der Swarm-Master den Container auf einem der Swarm-Agenten im Swarm, wenn ein Docker-Container unter Verwendung des Swarm-Endpunkts auf dem Swarm ausgeführt wird. Um auf den Nginx-Server zuzugreifen, der im Docker-Container auf dem Swarm-Endpunkt ausgeführt wird, muss die öffentliche IP des Swarm-Agenten verwendet werden. Der von uns verwendete Schwarm hat nur einen Schwarmagenten. Die öffentliche IP des Schwarmagenten kann aus der Ressourcenliste abgerufen werden, wie in Abbildung 1 gezeigt.
Abbildung 1: Öffentliche IP-Adresse des Schwarmagenten
Alternativ können Sie in den Ressourcen auf den Load Balancer des Swarm-Agenten klicken , wie in Abbildung 2 gezeigt.
Abbildung 2: Swarm Agent Load Balancer
Rufen Sie auf der Detailseite des Swarm-Agenten die IP-Adresse ab (siehe Abbildung 3).
Abbildung 3: IP-Adresse des Schwarmagenten
Die IP-Adresse kann auch von der Detailseite des Swarm-Agent-Load-Balancers abgerufen werden, wie in Abbildung 4 gezeigt.
Abbildung 4: Öffentliche IP-Adresse des Swarm-Agenten auf der Load-Balancer-Seite
Navigieren Sie in einem Browser auf einem lokalen Computer zur öffentlichen IP-Adresse des Swarm-Agenten. Die Willkommensseite des Nginx-Servers wird angezeigt, wie in Abbildung 5 gezeigt.
Abbildung 5: Aufrufen von Nginx Server in einem Browser
Entfernen eines Docker-Containers
Um einen Docker-Container zu entfernen, führen Sie docker rm aus Befehl. Ein laufender Docker-Container kann nicht entfernt werden. Stoppen Sie zuerst den Docker-Container hello-nginx läuft auf dem Schwarm.
[email protected]:~$ docker -H 172.16.0.5:2375 stop hello-nginxhello-nginx
Anschließend kann der gestoppte Container mit docker rm entfernt werden .
[email protected]:~$ docker -H 172.16.0.5:2375 rm hello-nginxhello-nginx
Initialisieren des Docker Swarm-Modus
Wie bereits erwähnt, ist beim Azure Container Service Swarm der Swarm-Modus standardmäßig nicht aktiviert. Der Swarm-Modus muss mit docker swarm init initialisiert werden Befehl.
[email protected]:~$ docker swarm init --advertise-addr 52.176.1.213Swarm initialized:current node (ia4uj7431stu8y0j5h2yvdp27) is now a manager.
Führen Sie den folgenden Befehl aus, um diesem Schwarm einen Worker hinzuzufügen:
docker swarm join --tokenSWMTKN-1-5ksj7uqccgv1vnnmie09qmt191ldpupof4ihg4vhm083c20xsh -6uyq5653uo62e521bcoatzyyz52.176.1.213:2377
Um diesem Schwarm einen Manager hinzuzufügen, führen Sie „docker swarm join-token manager“ aus und folgen Sie den Anweisungen.
Listen Sie die Schwarmmodus-Knoten mit dem Docker-Knoten ls auf Befehl. Der Swarm-Manager-Knoten wird aufgelistet.
[email protected]:~$ docker node lsID HOSTNAME STATUS VERFÜGBARKEIT MANAGER STATUSia4uj7431stu8y0j5h2yvdp27 * swarm-master-D50F2361-0 Ready Active Leader
Erstellen eines Docker-Dienstes
Nachdem Sie den Docker-Swarm-Modus initialisiert haben, erstellen Sie mit docker service create einen Docker-Dienst Befehl. Erstellen Sie als Beispiel einen Docker-Dienst, der aus zwei Replikaten besteht, indem Sie das Docker-Image alpine verwenden und ping docker.com.
[email protected]:~$ docker service create--replicas 2 --name helloworld alpine ping docker.comtg1ywqiyei3jw9prco6890ol1
Erstellen Sie als weiteres Beispiel einen Docker-Dienst mit dem Docker-Image tutum/hello-world und stellen Sie den Dienst auf dem Host auf Port 8080 bereit.
[email protected]:~$ docker service create> --name hello-world> --publish 8080:80> --replicas 2> tutum/hello-world3e38c1595cddg0ckmoyasrnnu
Docker-Dienste auflisten
Listen Sie die Docker-Dienste mit dem docker service ls auf Befehl. Die beiden im vorherigen Abschnitt erstellten Dienste werden aufgelistet.
[email protected]:~$ docker service lsID NAME MODE REPLICAS IMAGE PORTS3e38c1595cdd hallo-welt repliziert 2/2 tutum/hello-world:latest *:8080->80/tcptg1ywqiyei3j helloworld repliziert 2/2 alpine:neueste
Docker-Dienstaufgaben auflisten
Listen Sie die Docker-Dienstaufgaben für helloworld auf Dienst basierend auf dem Docker-Image alpine .
[email protected]:~$ docker service ps helloworldID NAME IMAGE NODE GEWÜNSCHTER STATUS AKTUELLER STATUS ERROR PORTS0mal82mskbge helloworld.1 alpine:latest swarm-master-D50F2361-0 Running Running vor 33 Sekundeniqz0bqkldxs2 helloworld.2 alpine:latest swarm- master-D50F2361-0 Running Running vor 32 Sekunden
Listen Sie die Docker-Dienstaufgaben für hello-world auf Dienst basierend auf tutum/hello-world Docker-Image.
[email protected]:~$ docker service ps hello-worldID NAME IMAGE NODE GEWÜNSCHTER STATUS AKTUELLER STATUS FEHLER PORTSyok48ja4o835 hello-world.1 tutum/hello-world:latest swarm-master-D50F2361-0 Läuft Läuft vor 38 Sekundenx5tvcuglwzd0 hello-world.2 tutum/hello-world:latest swarm-master-D50F2361-0 Running Running vor 38 Sekunden
Auflisten von Docker-Containern für den Docker-Dienst
Die Docker-Container für einen Docker-Dienst auf einem Docker-Host im Swarm können mit dem docker ps aufgelistet werden Befehl.
[email protected]:~$ docker psCONTAINER ID IMAGE BEFEHL ERSTELLT STATUS PORTS NAMESb6b069102300 tutum/hello-world:latest "/bin/sh -c 'php-f..." vor 6 Minuten Up 6 Minuten 80/ tcp hello-world.2.x5tvcuglwzd05olktbf3tpfqe62e26d4bc0ff tutum/hello-world:latest "/bin/sh -c 'php-f..." vor 6 Minuten Up 6 Minuten 80/tcp hello-world.1.yok48ja4o835nc7cog8hhjlr7db4827da350b alpine:latest " pingdocker.com" vor 7 Minuten nach oben 7 Minuten helloworld.2.iqz0bqkldxs2sg8ny50je7e7y92dab9f7ae97 alpine:latest "pingdocker.com" vor 7 Minuten nach oben 7 Minuten helloworld.1.0mal82mskbgecbcwh3op18nrr
Docker-Container für die hello-world und Hallo Welt Dienste aufgelistet werden.
Durchsuchen von Protokollen, die von einem Docker-Service-Container generiert wurden
Die ggf. in einem Docker-Container für einen Docker-Dienst generierten Protokolle können mit den Docker-Protokollen aufgelistet werden Befehl. Rufen Sie als Beispiel die Container-ID für einen Alpine-Image-basierten Dienst ab und listen Sie die Protokolle auf:
[email protected]:~$ docker logs db4827da350bPING docker.com (34.201.187.190):56 Datenbytes
Wie die Ausgabe zeigt, wird die Domain docker.com angepingt und 56 Byte Daten werden ausgetauscht.
Schlussfolgerung
In diesem Artikel haben wir die Verwendung von Docker in einem Docker Swarm-Cluster auf Azure Container Service besprochen. Wir haben eigenständige Docker-Container und Docker-Dienste auf dem Swarm verwendet. Ein Swarm-Cluster auf ACS macht einen Swarm-Endpunkt verfügbar, um einen eigenständigen Docker-Container auszuführen. Wenn Docker-Container auf dem Swarm-Endpunkt ausgeführt werden, führt der Swarm eigenständige Docker-Container auf Swarm-Agenten aus. Der Swarm-Modus ist standardmäßig nicht aktiviert und muss auf einer Swarm-Master-VM initialisiert werden.