Verwenden von Docker
Für die offene Docker-Plattform steht eine hervorragende Dokumentation zur Verfügung, die Sie lesen und beachten sollten.
Warum Docker?
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.
Welche Vorteile bietet dies?
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.
Terminologie
Zum Arbeiten mit Docker sollten Sie mit einigen Grundbegriffen vertraut sein. Weitere Information finden Sie auf der Website zur Docker-Dokumentation.
Container
Eine Laufzeitinstanz eines Image. Ein Container ist üblicherweise vollständig von der Hostumgebung isoliert und kann nur auf Hostdateien und -ports zugreifen, wenn er entsprechend konfiguriert wurde. Um ein Image in einem Container auszuführen, verwenden Sie den Docker-Befehl „run“.
Docker Hub
Eine Cloud-basierte Community-Ressource für das Arbeiten mit Docker. Docker Hub dient üblicherweise dem Hosten von Images, kann aber auch für die Benutzerauthentifizierung und Automatisierung der Image-Erstellung verwendet werden. Jeder kann Images in Docker Hub veröffentlichen.
Docker Compose
Compose ist ein Werkzeug, das mithilfe von YAML-Dateien Ihre Anwendungsservices konfiguriert und dann Docker-Anwendungen mit mehreren Containern definiert und ausführt. Weitere Informationen zu Compose finden Sie in der Docker Compose-Dokumentation.
Dockerfile
Ein Textdokument, das die Befehle zum Erstellen eines Docker-Image enthält. Sie können komplexe Befehle (zum Beispiel zum Festlegen eines vorhandenen Image als Basis) oder einfache Befehle (zum Beispiel zum Kopieren von Dateien zwischen Verzeichnissen) angeben. Um ein Image von einer Dockerfile-Datei zu erstellen, verwenden Sie den Docker-Befehl „build“.
Image
Ein eigenständiges, ausführbares Paket, das in einem Container ausgeführt wird. Ein Docker-Image ist eine Binärdatei, die alle erforderlichen Elemente zum Ausführen eines einzelnen Docker-Containers einschließlich Metadaten enthält. Sie können eigene Images (mit einer Dockerfile-Datei) erstellen oder Images verwenden, die von anderen Personen erstellt und in einer Registrierung (wie Docker Hub) verfügbar gemacht wurden. Um ein Image von einer Dockerfile-Datei zu erstellen, verwenden Sie den Docker-Befehl „build“. Um ein Image in einem Container auszuführen, verwenden Sie den Docker-Befehl „run“.
Erste Schritte mit Docker und Host Access for the Cloud
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.
Hinweis
Stellen Sie sicher, dass Sie die neueste Version von Docker und Docker Compose ausführen.
Der Ordner docker/samples
enthält Beispiele. Weitere Anleitungen 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
undsessionserver.jar
im Docker-Ordner. Für die Dateientrypoint.sh
muss das ausführbare Bit festgelegt sein. -
Erstellen Sie das Docker-Image.
-
Führen Sie das Docker-Image aus.
Docker-Image erstellen
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 keine Version verfügbar ist, ist das Standard-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.
Image ausführen
Bevor Sie das Image des Sitzungsservers in einem Docker-Container ausführen können, müssen Sie diese Schritte ausführen:
-
Adresse des MSS-Servers angeben
Um den Ort des MSS-Servers anzugeben, übergeben Sie eine Umgebungsvariable über Docker an den Sitzungsserver. Beispiel:
--env MSS_SERVER=mss.server.com
-
Passwort für Serviceregistrierung angeben
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 Eigenschaftservice.registry.password
. -
MSS anweisen, dem Identitätszertifikat des Sitzungsservers zu vertrauen
Führen Sie diesen Schritt in der Verwaltungskonsole unter „Configure Settings > Trusted Certificates“ (Einstellungen konfigurieren > Verbürgte Zertifikate) aus. Weitere Informationen finden Sie in der Dokumentation zur MSS-Verwaltungskonsole unter Trusted Certificates (Verbürgte Zertifikate). Das Zertifikat des Sitzungsservers ist im Verzeichnis sessionserver/etc verfügbar.
-
Keystore mit dem Identitätszertifikat des Sitzungsservers angeben
Der Sitzungsserver weist sich mithilfe eines Zertifikats aus. Dieses Zertifikat sollte im Java-Keystore
/sessionserver/etc/keystore.bcfks
im Container hinterlegt sein. Der Schlüsselpaareintrag servlet-engine muss die vollständige Zertifikatskette enthalten. -
Truststore mit MSS-Zertifikat angeben
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
/sessionserver/etc/trustcerts.bcfks
des Containers befinden, wird vertraut. -
Keystore und Truststore zu denen im Container zuordnen
Sie können dem Container die Keystores auf zwei Wegen präsentieren:
-
Per Volume-Mount
Alternativ:
-
Vorhandenes Docker-Image erweitern
Per Volume-Mount
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.
Vorhandenes Docker-Image erweiterndocker run -d \ --env MSS_SERVER=<MSS-Servername> \ --env SERVICE_REGISTRY_PASSWORD=<Passwort hier eingeben> \ --env MANAGEMENT_SERVER_URL=https://<MSS-Servername>:<Port>/mss \ --env HOST_NAME=<DNS-Name_des_Docker-Servers> \ --volume ~/demo_keystore.bcfks:/sessionserver/etc/keystore.bcfks \ --volume ~/demo_truststore.bcfks:/sessionserver/etc/trustcerts.bcfks \ --publish 7443:7443 \ sessionserver
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. -
VON hacloud/sessionserver:
<Beispiel: hacloud/sessionserver:latest oder hacloud/sessionserver:version>
-
KOPIEREN SIE:
<Ihr-Pfad>/keystore.bcfks /sessionserver/etc/keystore.bcfks
-
KOPIEREN SIE:
<Ihr-Pfad>/truststore.bcfks /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 -d \ --env MSS_SERVER=<MSS-Servername> \ --env SERVICE_REGISTRY_PASSWORD=<Passwort hier eingeben> \ --env MANAGEMENT_SERVER_URL=https://<MSS-Servername>:<Port>/mss \ --env HOST_NAME=<DNS-Name_des_Docker-Servers> \ --publish 7443:7443 \ demo
-
-
Docker-Hostname und -Port angeben
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
Beispiele
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:
-
Installieren Sie Docker Compose. Machen Sie sich vor dem Fortfahren mit der Docker-Dokumentation zu Docker Compose vertraut.
-
Sie benötigen einen MSS-Server, der ausgeführt wird.
-
Sie benötigen eine Keystore-Datei zum Sichern von TLS-Verbindungen zum Sitzungsserver, der MSS vertraut.
-
Sie benötigen eine Truststore-Datei mit eingerichtetem MSS-Serverzertifikat.
-
Erstellen Sie das Docker-Image für den Sitzungsserver.
Folgende Beispiele sind verfügbar:
-
Einfaches Beispiel: Ein einfaches Beispiel mit Demo-Keystore- und Demo-Truststore-Dateien, in die Sie ein MSS-Serverzertifikat importieren können.
-
Hybrid: 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.
-
Erweiterungen: Ein Beispiel mit einer Erweiterung, das darstellt, wie der Webclient aktualisiert, geändert und angepasst werden kann.
-
Lastverteiler: Ein Beispiel mit Lastverteiler, das den Lastausgleich zwischen verknüpften Containern beschreibt.
Einfaches Beispiel
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 Zertifikat in den Truststore des Sitzungsservers importieren.
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
Beispiel eines Hybridszenarios
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 ENV-Datei.
So starten Sie den Sitzungsserverservice:
-
Kopieren Sie
.env
unddocker-compose.yml
zusessionserver/microservices/sessionserver/
. -
Führen Sie aus diesem Verzeichnis Folgendes aus:
docker-compose up -d
Beispiel für ein Erweiterungsszenario
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 finden Sie unter „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, und SERVICE_REGISTRY_PASSWORD in der ENV-Datei.
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 //sessionserver/etc/keystore.bcfks COPY ./certs/trustcerts.bcfks //sessionserver/etc/trustcerts.bcfks COPY ./extensions /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 Image „extensions“.version: '3' services: sessionserver: image: extensions environment: - LOGGING_FILE_NAME=./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
Lastausgleich
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 >./certs/loadbalancer.pem
So starten Sie die Sitzungsserver- und haproxy-Services:
docker-compose up -d
Alternativ:
docker-compose up --scale sessionserver=n -d
Hierbei stellt „n“ 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