Zum Inhalt

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:

  1. Docker installieren. Befolgen Sie die Anweisungen auf der Docker-Website.

  2. Extrahieren Sie die Downloadpaketdatei und suchen Sie die Dateien Dockerfile, entrypoint.sh und sessionserver.jar im Docker-Ordner. Für die Datei entrypoint.sh muss das ausführbare Bit festgelegt sein.

  3. Erstellen Sie das Docker-Image.

  4. 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.

  1. 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).

  2. Ü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 Eigenschaft service.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.

       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> \
       --volume ~/demo_keystore.bcfks:/sessionserver/etc/keystore.bcfks \
       --volume ~/demo_truststore.bcfks:/sessionserver/etc/trustcerts.bcfks \
       --publish 7443:7443 \
       sessionserver
    
    Vorhandenes Docker-Image erweitern

    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 Sitzungsserverdienst:

    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 Sitzungsserverdienst:

  • Kopieren Sie .env und docker-compose.yml zu sessionserver/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 Sitzungsserverdienst:

docker-compose up -d

Sie könnten außerdem das Docker-Basisimage „hacloud/sessionserver“ erweitern und die Erweiterungsdateien in den Docker-Container kopieren:

  1. 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/
    

  2. Erstellen Sie das erweiterte Docker-Image und nennen Sie es extensions.

    docker build -t extensions .

  3. 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:

  1. Generieren Sie einen eindeutigen privaten Schlüssel (KEY):

    sudo openssl genrsa -out mydomain.key 2048

  2. Generieren Sie einen Zertifizierungsantrag (CSR):

    sudo openssl req -new -key mydomain.key -out mydomain.csr

  3. Erstellen Sie ein eigensigniertes Zertifikat (CRT):

    sudo openssl x509 -req -days 365 -in mydomain.csr -signkey mydomain.key -out mydomain.crt

  4. 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