Für die offene Docker-Plattform steht eine hervorragende Dokumentation zur Verfügung, die Sie lesen und beachten sollten.
Docker ist eine eigenständige Plattform, mit der Sie Anwendungen in einem Container entwickeln, bereitstellen und ausführen können. Ihre Anwendung, alle von der Anwendung benötigten Abhängigkeiten, wie Binärdateien und Bibliotheken, und die Konfigurationsinformationen sind im Container enthalten. Sie können mehrere Container bereitstellen, die alle in Docker und über dem Betriebssystem ausgeführt werden.
Mithilfe von Docker können Sie Ihre Anwendungen vertikal skalieren, d. h. mehrere Instanzen des Sitzungsservers können auf einem Server vorhanden sein und jede Instanz liefert die gleiche Leistung, die sie beim Erstellen und Testen bot.
Die Verwendung von Containern bietet mehrere Vorteile:
Leistung
Virtuelle Maschinen sind eine Alternative zu Containern. Container enthalten jedoch (im Gegensatz zu virtuellen Maschinen) kein Betriebssystem. Das bedeutet, dass Container schneller erstellt und gestartet werden können und einen kleineren Fußabdruck hinterlassen.
Agilität
Weil Container portabler sind und eine bessere Leistung bieten, können Sie agilere und dynamische Entwicklungsmethoden nutzen.
Isolation
Docker-Container sind unabhängig voneinander. Dies bietet den Vorteil, dass ein Docker-Container, der eine Anwendung und die erforderlichen Versionen der unterstützenden Software enthält, nicht mit einem anderen Container mit der gleichen Anwendung, aber anderer unterstützender Software, in Konflikt geraten kann. So können Sie sicher sein, dass sich das Image, das Sie erstellen, in jeder Entwicklungs- und Bereitstellungsphase genau wie erwartet verhält.
Skalierbarkeit
Neue Container lassen sich einfach und schnell erstellen. Die Docker-Dokumentation enthält Informationen zum Verwalten mehrerer Container.
Zum Arbeiten mit Docker sollten Sie mit einigen Grundbegriffen vertraut sein. Weitere Information finden Sie auf der Website zur Docker-Dokumentation.
Wenn Sie sich bei der Installation von HACloud für die Verwendung von Docker entscheiden, enthält das Installationspaket eine anfängliche Dockerfile und eine zugehörige JAR-Anwendungsdatei für die ersten Schritte bei der Verwendung des Sitzungsservers in Containern. Diese Dateien sind vor der Installation verfügbar.
Der Ordner docker/samples enthält Beispiele. Eine Anleitung dazu finden Sie unter Beispiele.
Das Erstellen des Basisimage erfolgt in vier Schritten:
Docker installieren. Befolgen Sie die Anweisungen auf der Docker-Website.
Extrahieren Sie die Downloadpaketdatei und suchen Sie die Dateien Dockerfile, entrypoint.sh und sessionserver.jar im Ordner Docker.
Erstellen Sie das Docker-Image.
Führen Sie das Docker-Image aus.
Nachdem Sie den ersten und zweiten Schritt ausgeführt haben, d. h. Docker installiert und die Dockerfile und die sessionserver.jar-Datei extrahiert und gefunden haben, besteht der nächste Schritt im Erstellen des Docker-Basisimage des Sitzungsservers.
Führen Sie im Ordner, der die Dockerfile enthält, den folgenden Befehl aus:
docker build -t hacloud/sessionserver:<Version> .
Ersetzen Sie <version> mit der Version des Sitzungsservers. Wenn eine Version nicht verfügbar ist, ist das standardmäßige Tag (-t) latest (neueste Version).
Überprüfen Sie, ob das Image erfolgreich erstellt wurde. Führen Sie den folgenden Befehl aus:
docker images
Die Ausgabe sollte Informationen zum soeben erstellten Image enthalten.
Bevor Sie das Image des Sitzungsservers in einem Docker-Container ausführen können, müssen Sie diese Schritte ausführen:
Um den Ort des MSS-Servers anzugeben, übergeben Sie eine Umgebungsvariable über Docker an den Sitzungsserver. Beispiel: --env MSS_SERVER=mss.server.com
Um das Passwort für die Serviceregistrierung anzugeben, übergeben Sie eine Umgebungsvariable über Docker an den Sitzungsserver. Beispiel: --env SERVICE_REGISTRY_PASSWORD=<Ihr_Passwort>.
Das Passwort ist in der Eigenschaft service.registry.password unter ./mss/server/conf/container.properties auf dem MSS-Server abrufbar. Verwenden Sie die gesamte Eigenschaft service.registry.password.
Führen Sie diesen Schritt in der Verwaltungskonsole unter „Einstellungen konfigurieren > Verbürgte Zertifikate“ aus. Mehr dazu erfahren Sie in der Dokumentation zur MSS-Verwaltungskonsole, im Abschnitt To add a server certificate to the MSS trust store (Hinzufügen eines Serverzertifikats zum Truststore). Das Zertifikat des Sitzungsservers ist im Verzeichnis sessionserver/etc verfügbar.
Der Sitzungsserver weist sich mithilfe eines Zertifikats aus. Dieses Zertifikat sollte im Java-Keystore /opt/sessionserver/etc/keystore.bcfks im Container hinterlegt sein.
Wenn der Sitzungsserver ausgehende TLS-Verbindungen aufbaut, prüft er die Vertrauenswürdigkeit der Remoteserver (z. B. MSS) anhand der Zertifikate in seinem Truststore. Zertifikaten, die sich im Java-Keystore /opt/sessionserver/etc/trustcerts.bcfks des Containers befinden, wird vertraut.
Sie können dem Container die Keystores auf zwei Wegen präsentieren:
Mit einem Volume-Mount wird eine Datei oder ein Verzeichnis auf dem Hostcomputer im Container eingehängt. Die Datei bzw. das Verzeichnis wird mit dem vollständigen oder relativen Pfad auf dem Hostcomputer referenziert.
Mit dem Volume-Mount werden die Keystore- und Truststore-Dateien auf dem Host im Docker-Container eingehängt.
docker run --env MSS_SERVER=localhost \
--env SERVICE_REGISTRY_PASSWORD=<Passwort hier eingeben> \
--volume ~/demo_keystore.bcfks:/opt/sessionserver/etc/keystore.bcfks \
--volume ~/demo_truststore.bcfks:/opt/sessionserver/etc/trustcerts.bcfks \
--publish 7443:7443 \
sessionserver
Nachteil von Volume-Mounts: Da sich Keystores auf jedem Docker-Host befinden müssen, auf dem ein Container ausgeführt wird, ist der Docker-Container nicht besonders portabel.
Mit dieser Methode erstellen Sie eine neue Dockerfile-Datei, um die erforderlichen Dateien in das Docker-Image zu kopieren. Auf diese Weise lässt sich das Docker-Image besser verschieben.
Erstellen Sie zuerst eine Dockerfile, die aus dem Docker-Image „hacloud/sessionserver“ erweitert wird.
FROM hacloud/sessionserver:<Beispiel: hacloud/sessionserver:latest oder hacloud/sessionserver:version>
COPY <Ihr Pfad>/keystore.bcfks /opt/sessionserver/etc/keystore.bcfks COPY <Ihr Pfad>/truststore.bcfks /opt/sessionserver/etc/trustcerts.bcfks
Erstellen Sie dann das erweiterte Docker-Image und nennen Sie es demo.
docker build -t demo .
Führen Sie dann das Image demo aus.
docker run --env MSS_SERVER=localhost \
--env SERVICE_REGISTRY_PASSWORD=<Passwort eingeben> \
--publish 7443:7443 \
demo
Damit MSS den Sitzungsserver findet, muss dieser seinen Hostnamen versenden. Da Docker einen zufälligen einmaligen Namen generiert, der von außerhalb des Containers nicht erreichbar ist, müssen Sie den Docker-Hostnamen für MSS angeben. Teilen Sie dem Sitzungsserver außerdem mit, welchen Port Sie auf Ihrem Docker-Host veröffentlichen. Clients, die auf den Sitzungsserver zugreifen, werden hier herauskommen: <Docker_Hostname>:<Docker_veröffentlichter_Port>.
--env HOST_NAME=docker_host_name --env SERVER_PORT=docker_published_port
Die Beispiele im Ordner docker/samples illustrieren vier Szenarien mit Docker Compose. Compose ist ein Werkzeug, das eine YAML-Datei verwendet, um die Anwendungen mit einem einzigen Befehl zu konfigurieren und auszuführen.
Voraussetzungen
So führen Sie die Beispiele aus:
Docker Compose installieren. Machen Sie sich vor dem Fortfahren mit der Docker-Dokumentation zu Docker Compose vertraut.
Ein MSS-Server, der ausgeführt wird
Eine Keystore-Datei zum Sichern der TLS-Verbindungen zum Sitzungsserver, der MSS vertraut.
Eine Truststore-Datei mit eingerichtetem MSS-Serverzertifikat
Die Schritte unter Docker-Image für den Sitzungsserver erstellen müssen abgeschlossen sein
Folgende Beispiele sind verfügbar:
Einfaches Beispiel - Ein einfaches Beispiel mit einer Demo-Keystore-Datei und Truststore-Dateien, in die Sie ein MSS-Serverzertifikat importieren können
Beispiel eines Hybridszenarios - Ein Beispiel eines Hybridszenarios mit einer lokalen Host Access for the Cloud-Installation, in dem auf einem Datenträger vorhandene Keystore- und Truststore-Dateien im Docker-Container eingehängt werden
Beispiel für ein Erweiterungsszenario - Ein Beispiel mit einer Erweiterung, das darstellt, wie der Webclient aktualisiert, modifiziert und angepasst werden kann
Lastausgleich - Ein Beispiel mit Lastverteiler, das den Lastausgleich zwischen verknüpften Containern beschreibt
Dieses einfache Beispiel zeigt, wie das Docker-Image des Sitzungsservers in Docker Compose ausgeführt wird. Für dieses Beispiel müssen Sie das Zertifikat des MSS-Servers in das bereitgestellte Beispiel ./certs/demo_truststore.bcfks importieren. Verwenden Sie dazu beispielsweise KeyStore Explorer. Standardmäßig befindet sich Ihr MSS-Zertifikat unter /mss/server/etc/<Computername>.cer. (siehe Sichern der Verbindungen).
Bevor Sie das Beispiel ausführen, aktualisieren Sie die Werte MSS_SERVER, HOST_NAME und SERVICE_REGISTRY_PASSWORD in docker-compose.yml.
So starten Sie den Sitzungsserverservice:
docker-compose up
So führen Sie den Service in einem Daemon aus (getrennter Modus):
docker-compose up -d
So zeigen Sie ausgeführte Container an:
docker ps
In diesem Beispiel ist eine lokale Installation von Host Access for the Cloud mit Keystore- und Truststore-Dateien auf einem Datenträger vorhanden. Diese Dateien müssen im Docker-Container eingehängt (dorthin kopiert) werden.
Bevor Sie das Beispiel ausführen, aktualisieren Sie die Werte MSS_SERVER, HOST_NAME, SERVER_PORT und SERVICE_REGISTRY_PASSWORD in der Datei .env.
So starten Sie den Sitzungsserverservice:
Kopieren Sie .env und docker-compose.yml zu sessionserver/microservices/sessionserver/.
Führen Sie aus diesem Verzeichnis Folgendes aus: docker-compose up -d
Mithilfe von Erweiterungen und eigenem HTML-, CSS- oder JavaScript-Code können Sie die Darstellung des Webclients über den Browser aktualisieren, ändern und anpassen. Weitere Informationen hierzu finden Sie in Erweitern des Webclients.
In diesem Beispiel wird SPRING_PROFILES_ACTIVE auf extensions-enabled festgelegt und der Speicherort der Erweiterungen in docker-compose.yml zugeordnet.
Bevor Sie das Beispiel ausführen, aktualisieren Sie die Werte MSS_SERVER, HOST_NAME, SERVER_PORT und SERVICE_REGISTRY_PASSWORD in der Datei .env.
So starten Sie den Sitzungsserverservice:
docker-compose up -d
Sie könnten außerdem das Docker-Basisimage hacloud/sessionserver erweitern und die Erweiterungsdateien in den Docker-Container kopieren:
Erstellen Sie die Dockerfile, die aus dem Docker-Image „hacloud/sessionserver“ erweitert wird.
FROM hacloud/sessionserver COPY ./certs/keystore.bcfks /opt/sessionserver/etc/keystore.bcfks COPY ./certs/trustcerts.bcfks /opt/sessionserver/etc/trustcerts.bcfks COPY ./extensions /opt/sessionserver/extensions/
Erstellen Sie das erweiterte Docker-Image und nennen Sie es extensions.
docker build -t extensions
Aktualisieren Sie docker-compose.yml zur Verwendung des neuen Erweiterungs-Image.
version: '3'
services:
sessionserver:
image: extensions
environment:
- LOGGING_FILE=./logs/sessionserver.log
- LOGGING_FILE_MAXSIZE=10MB
- LOGGING_FILE_MAXHISTORY=10
- MSS_SERVER=${MSS_SERVER}
- SERVICE_REGISTRY_PASSWORD=${SERVICE_REGISTRY_PASSWORD}
- SPRING_PROFILES_ACTIVE=extensions-enabled
ports:
- ${SERVER_PORT}:7443
HAProxy ist ein Lastverteiler. Weitere Informationen zu HAProxy erhalten Sie auf der zugehörigen Website.
In diesem Beispiel wird ein haproxy-Service in die Datei docker-compose.yml eingeschlossen. Das Beispiel verwendet ein haproxy-Image zum Ausgleich zwischen verknüpften Containern. Dieses Beispiel verwendet SLL-Bridging zum Verknüpfen der Container.
Um eine sichere Kommunikation zwischen den Clients und dem Lastverteiler zu gewährleisten, aktualisieren Sie die Eigenschaft LOAD_BALANCER_CERT in der .env-Datei mit dem Speicherort des Lastverteilerzertifikats.
Zum Testen können Sie ein eigensigniertes Zertifikat generieren:
Generieren Sie einen eindeutigen privaten Schlüssel (KEY):
sudo openssl genrsa -out mydomain.key 2048
Generieren Sie einen Zertifizierungsantrag (CSR):
sudo openssl req -new -key mydomain.key -out mydomain.csr
Erstellen Sie ein eigensigniertes Zertifikat (CRT):
sudo openssl x509 -req -days 365 -in mydomain.csr -signkey mydomain.key -out mydomain.crt
Fügen Sie KEY und CERT an loadbalancer-pem an:
sudo cat mydomain.key mydomain.crt > ./etc/loadbalancer.pem
So starten Sie die Sitzungsserver- und haproxy-Services:
docker-compose up -d
Alternativ:
docker-compose up --scale sessionserver=n -d
n stellt die Anzahl der Sitzungsserverinstanzen dar.
Sie können die Anzahl der Sitzungsserverinstanzen nach dem Starten des Services ändern:
docker-compose scale sessionserver=n
So greifen Sie auf den Sitzungsserver und die HAProxy-Statistikseite zu:
https://server:7443
http://server:1936/haproxy?stats
Verwenden Sie:
Benutzer: admin
Passwort: password