fb
WSO2 Easy 7 Minuten

Wie man den WSO2 API Manager in Docker ausführt

Rob Blaauboer
Rob Blaauboer
Integration Consultant & WSO2 Trainer
WSO2 API Manager on Docker
Scrollen

Wenn du mit den Produkten von WSO2 arbeiten möchtest, gibt es verschiedene Möglichkeiten, wie du sie einsetzen kannst. Du kannst sie lokal auf deinem Computer ausführen, wenn du MacOS, Windows oder Linux verwendest. 

Variationen zu einem Thema

Viele dieser Optionen sind Variationen des gleichen Themas. Zum Beispiel, wenn du in Virtualbox läufst, dann läufst du grundsätzlich in einer hypervisierten Umgebung. Ein Hypervisor schafft eine Umgebung, die wie eine isolierte Maschine aussieht. Du kannst zum Beispiel eine Linux CentOS Umgebung mit VirtualBox auf deinem Windows PC laufen lassen. Soweit alles in der CentOS-Umgebung läuft, sieht es wie ein normales Betriebssystem aus. 

Mit Docker arbeiten

Bei der Arbeit mit Docker verhält es sich etwas anders. Docker Container sind leichtgewichtig und benötigen keinen Hypervisor, weil sie direkt auf die benötigten Kernel-Routinen zugreifen werden. Auf Windows kannst du Docker auch laufen lassen. Allerdings musst du das Windows Subsystem für Linux auf Windows installiert haben. 

Mit Docker können wir WSO2 Instanzen schnell aufsetzen, indem wir das WSO2 Docker Repo nutzen, welches für registrierte Nutzer der WSO2 Website verfügbar ist. In diesem Blog zeige ich dir, wie du mit Docker und Docker compose schnell einen simplen API Manager einrichten kannst. Lass uns mit einigen Erklärungen darüber beginnen, was sich in einem Docker Container befindet. 

Was befindet sich in einem Docker-Container?

Ein Docker-Container baut auf einem Docker-Image auf. Das Docker-Image besteht aus „Schichten“ und mehrere Schichten bilden eine Basis, auf der andere Nutzer des Images ihren Container aufbauen können. Die Docker-Images, die von WSO2 erstellt werden, beinhalten eine minimale Installation mit Tools wie Bash, einigen anderen Tools und natürlich einem WSO2 Produkt. Es gibt verschiedene Arten von Docker-Images, jedes mit einer bestimmten Version und Art von WSO2-Produkt.

Wie man ins Innere eines Docker-Containers schaut 

Es gibt mehrere Möglichkeiten, in einen Docker-Container hineinzuschauen und eine davon ist, das Docker Kommandozeilen-Tool zu verwenden, das mit Docker bereitgestellt wird.

Wir können den Container betreten, indem wir eine Kommandozeilen-Shell in ihm öffnen. Diese Shell wird innerhalb des Containers gestartet, ist aber auf deiner Kommandozeile visualisiert. So kann man mit dem Container interagieren, als ob man über eine SSH-Sitzung eingeloggt wäre. 

Um eine Shell zu einem laufenden Docker-Container zu öffnen, müssen wir diesen zunächst starten und dann den Container über seine ID oder seinen Namen identifizieren. Wenn wir wissen, welchen Container wir brauchen, dann können wir eine Shell öffnen und hineinschauen.

Die Befehle, die ich verwende, sind alle Standard-Docker-Befehle. Ich gehe davon aus, dass wir einen laufenden Docker-Container haben. 

Die Eingabe von docker ps zeigt dir die laufenden Container an. Wenn du ‚-a‘ zum Befehl hinzufügst, werden auch nicht laufende Container angezeigt (ich zeige nur den relevanten Container).

CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
8a787ffa823efbbec18d601c„/home/wso2carbon/do…“About an hour agoUp About an hour5672/tcp, 8243/tcp, 8280/tcp, 9099/tcp, 9443/tcp, 9611/tcp, 9711/tcp, 9763/tcp, 9999/tcp, 11111/tcpwso2apim-320

Jetzt, da wir die Container-ID kennen, können wir diese verwenden, um die Bash innerhalb des Containers auszuführen. Diese Nummer wird für deinen Container einzigartig sein. Der Befehl ist ganz einfach:

docker exec -it 8a787ffa823e bash

Docker

Wie du sehen kannst, haben wir jetzt ein Kommandozeileninterface, das wir nutzen können, um in den Container zu schauen. Wenn wir durch den Verzeichnisbaum gehen, können wir sehen, dass es einen API Manager gibt, der unter /home/wso2carbon/wso2am-3.2.0 installiert ist

Alternativen zu einem Docker, Portainer

Eine Alternative zur Docker Kommandozeile ist eine grafische Benutzeroberfläche namens Portainer. Portainer ist laut seiner Webseite ein „universelles“ Container Management Tool für Kubernetes, Docker, Docker Swarm und Azure ACI. Mit dieser GUI kannst du Container verwalten, ohne die Docker-Befehle kennen zu müssen. Wenn du dich von der Kommandozeile fernhalten möchtest, dann kann das sehr praktisch sein.

Das Besondere an Portainer ist also, dass es tatsächlich in einem Container läuft. Es muss also nichts installiert werden und es gibt nur wenige Downloads. Und im Grunde kannst du deinen Portainer innerhalb weniger Minuten zum Laufen bringen. Um zu zeigen, wie einfach die Installation von Portainer ist, gibt es eine Anleitung, der du folgen kannst.

Portainer benötigt einen Ort, an dem es einige permanente Daten speichern kann. In Docker Begriffen wird dies ein ‚Volume‘ genannt. Ein Volumen kann entweder von Docker verwaltet werden oder du kannst Docker auf einen Ort deiner Wahl verweisen, auf einen beliebigen Ordner in deinem Dateisystem. Um die Sache zu vereinfachen und Docker das Volume für uns verwalten zu lassen, erstellen wir zunächst ein Volume für Portainer.

docker volume create portainer_data

Wenn das Volume vorhanden ist, dann können wir portainer mit folgendem Befehl starten:

docker run -d -p 8000:8000 -p 9000:9000 –name=portainer –restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

Vereinfacht gesagt, weisen wir Docker an, einen Container im Hintergrund laufen zu lassen, basierend auf dem portainer/portainer-ce Image, und wir geben einige Ports an, über die wir auf die portainer GUI zugreifen wollen. Es sind zwei Volumes konfiguriert, damit portainer auf die Docker-Verwaltungsinformationen zugreifen und einige Dinge speichern kann, die es zum Laufen braucht.

Sobald der Container gestartet ist, kannst du den bereits erwähnten Befehl docker ps verwenden. Danach kannst du das Interface über den Browser auf localhost über http://localhost:9000/#!/home aufrufen.

Das ist das Interface:

Portainer

Falls noch andere Container auf deiner Docker-Installation laufen, siehst du sie in einer Liste, wie im obigen Screenshot zu sehen ist. 

In die dritte Spalte der Liste sind vier Icons eingefügt: Logs, Inspect, Stats und Exec Console. 

API-M

Die Logs zeigen die Ausgaben der Docker-Konsole an, Inspect gibt einen Einblick in die Details des Containers. In Stats wird unter anderem die Speicher- und CPU-Auslastung angezeigt und Exec ermöglicht den Start eines Terminals in den Container.

Wenn wir einen WSO2 Container starten, dann wird die Ausgabe der Docker Konsole die WSO2 Carbon Log Ausgabe zeigen. 

Portainer

Wie starten wir ein WSO2 Docker Image?

Nachdem wir nun Docker laufen haben, können wir die neueste (Image-)Version des WSO2 API Manager Containers mit dem folgenden Befehl starten: 

docker run -d -p 9443:9443 -p 8280:8280 -p 8243:8243 –name WSO2AM320 wso2/wso2am:latest

Dies lässt den Container eigenständig laufen (d.h. im Hintergrund und erhält den Namen WSO2AM320) und ermöglicht dir den Zugriff auf die Ports 9443,8280 und 8243 von deinem System. Wenn du diese Ports nicht angibst, dann kannst du nicht auf die WSO2 API Manager Management Konsole zugreifen.

Den Container im Detached Mode auszuführen führt auch dazu, dass wir die Konsolenausgabe nicht sehen. 

Wenn wir den obigen Befehl ausführen, wird eine ContainerID angezeigt. Mit dieser ID können wir die Konsolenausgabe sehen. Verwende den folgenden Befehl und ersetze meine ID durch deine: 

docker logs -f 8a787ffa823e

Wenn wir den Browser verwenden, können wir die API Manager Management Konsole sehen und uns beim API Manager anmelden.

API manager

Docker komponieren

In den Beispielen oben sehen wir, dass die Docker-Befehle ziemlich lang und umständlich zu erstellen sein können. Man könnte diese Befehle in ein Startskript packen, um die Dinge zu vereinfachen oder man kann docker-compose verwenden. 

Docker-compose erlaubt es dir, Dienste in der Datei docker-compose.yml zu definieren. Jedes Service ist ein Container mit einer Konfiguration. Man kann mehrere Dienste in einer einzigen Datei angeben und somit mehrere Container mit einem einzigen Befehl starten. 

Fürs Erste können wir uns das Leben ein wenig einfacher machen, indem wir einfach die Konfiguration des WSO2 API Manager Containers oben angeben, mit allen Konfigurationen, die er verwenden soll.

Um die Sache ein wenig interessanter zu machen, lass uns eine kleine benutzerdefinierte Konfiguration auf die WSO2 API Manager Installation anwenden und lass uns den Port Offset ändern.

Ich habe eine Datei manipuliert: die deployment.toml Datei. Dort habe ich eine Änderung am Port Offset vorgenommen. 

Deployment

Danach habe ich eine Datei docker-compose.yml erstellt und einen Unterordner config/wso2am erstellt. In diesem Unterordner befindet sich diese deployment.toml Datei.I then created a docker-compose.yml file and created a config/wso2am subfolder. In that subfolder this deployment.toml file is placed.

Im Folgenden kannst du meine docker-compose.yml Datei sehen. Es gibt einen Dienst namens ‚apimanager‘, der auf dem wso2/wso2am:latest Image basiert und ich habe drei Ports angegeben, die ich auf meiner Maschine in einen Port mappen möchte, den WSO2 öffnet, wenn es beginnt.

Um die deployment.toml zu überschreiben, die ein Volume an den Ort liefert, an dem die deployment.toml innerhalb des Containers gespeichert ist, mit dem Image habe ich angegeben, wo ich die Datei vom Speicherort meiner Maschine gemappt habe (./config/wso2am/deployment.toml). 

Config

Der Schwachpunkt ist natürlich die Tatsache, dass ich WSO2 latest verwende, mich aber auf einen bestimmten Versionsstandort (z.B. 3.2.0) im Container beziehe. Ändert sich die ‚latest‘ Version zu einer anderen Version, dann ist das Volume-Mapping möglicherweise nicht mehr gültig.

Files
Terminal

Ich starte die Komposition mit docker-compose up.

Es werden einige Logs angezeigt und wie du in der obersten Zeile sehen kannst, wird der Offset nun angewendet und ergibt eine URL von https://localhost:9453/publisher, anstatt der regulären 9443 für einen Offset von Null. Ich bin in der Lage, die WSO2 API Manager Management Konsole zu öffnen und kann mit dem API Manager in Docker arbeiten!