Docker-Unterstützung
Das vcdb-tool ist auch als Docker-Image verfügbar und bietet alle Funktionen der Kommandozeilen-Schnittstelle
(CLI) von vcdb-tool für den Einsatz in containerisierten Anwendungen und Workflows. Die Verwendung von Docker ist der schnellste Weg, um mit vcdb-tool zu starten,
da keine Einrichtung oder Installation einer Java-Laufzeitumgebung erforderlich ist.
TL;DR
-
Linux
-
Windows CMD
docker run --rm --name vcdb-tool [-i -t] \
[-e CITYDB_HOST=the.host.de] \
[-e CITYDB_PORT=5432] \
[-e CITYDB_NAME=theDBName] \
[-e CITYDB_SCHEMA=theCityDBSchemaName] \
[-e CITYDB_USERNAME=theUsername] \
[-e CITYDB_PASSWORD=theSecretPass] \
[-v /my/data/:/data] \
vcdb-tool[:TAG] COMMAND
docker run --rm --name vcdb-tool [-i -t] ^
[-e CITYDB_HOST=the.host.de] ^
[-e CITYDB_PORT=5432] ^
[-e CITYDB_NAME=theDBName] ^
[-e CITYDB_SCHEMA=theCityDBSchemaName] ^
[-e CITYDB_USERNAME=theUsername] ^
[-e CITYDB_PASSWORD=theSecretPass] ^
[-v "C:\my\data:/data" ] ^
vcdb-tool[:TAG] COMMAND
Der help Befehl listet alle CLI-Optionen und Argumente auf. Für Unterbefehle (z.B. import citygml) verwenden
Sie die Syntax import help citygml, um die detaillierte Hilfe für den entsprechenden Unterbefehl anzuzeigen.
|
vcdb-tool Docker-Image erhalten
Verwendung eines vorgefertigten Images
Vorgefertigte Docker-Images für jede vcdb-tool Version sind als ZIP-Pakete über unsere Software-Downloadseite erhältlich.
Jedes Paket enthält die Image-Datei im .tar.gz Format und eine Schnellstartanleitung, die bei den ersten Schritten hilft.
Nach dem Entpacken des Pakets laden Sie das Image mit folgendem Befehl in Ihre lokale Docker Engine:
docker load -i /path/to/vcdb-tool-docker-image-<version>.tar.gz
Standardmäßig wird das Docker-Image unter dem Namen vcdb-tool:<version> registriert, wobei die Release-Version (<version>) als
Image-Tag verwendet wird.
Eigenes Image erstellen
Wenn Sie das Docker-Image lieber selbst erstellen möchten, laden Sie zunächst das ZIP-Paket mit der vcdb-tool Software von unserer
Software-Downloadseite herunter. Nach dem Entpacken finden Sie im Stammverzeichnis eine Datei namens Dockerfile. Sie können
diese Datei unverändert verwenden oder an Ihre spezifischen Anforderungen anpassen.
Das Dockerfile unterstützt das optionale Build-Argument RUNTIME_IMAGE_TAG, mit dem Sie das Eclipse Temurin
Basis-Image angeben können, das für das Erstellen des vcdb-tool Docker-Images verwendet werden soll.
Das Eclipse Temurin Projekt stellt einsatzbereite Docker-Images für Java Runtime Environments basierend auf OpenJDK bereit.
Eine vollständige Übersicht verfügbarer Tags finden Sie auf Docker Hub. Wird RUNTIME_IMAGE_TAG
nicht angegeben, wird ein Standard-Basis-Image verwendet.
Um das vcdb-tool Docker-Image zu erstellen, führen Sie den folgenden Befehl aus.
-
Linux
-
Windows CMD
# Mit einem Standard-Basis-Image erstellen
docker build -t vcdb-tool .
# Mit einem spezifischen TAG des Eclipse Temurin Basis-Images erstellen
docker build . -t vcdb-tool \
--build-arg RUNTIME_IMAGE_TAG=<TAG>
# Mit einem Standard-Basis-Image erstellen
docker build -t vcdb-tool .
# Mit einem spezifischen TAG des Eclipse Temurin Basis-Images erstellen
docker build . -t vcdb-tool ^
--build-arg RUNTIME_IMAGE_TAG=<TAG>
Ersetzen Sie <TAG> durch die gewünschte Version des Eclipse Temurin Basis-Images, wie z.B. 21-jre-noble.
|
Verwendung und Konfiguration
Das vcdb-tool Docker-Image benötigt in den meisten Fällen keine Konfiguration und ermöglicht die
direkte Verwendung der vcdb-tool CLI. Hängen Sie einfach den vcdb-tool Befehl an die
docker run Befehlszeile an. Eine vollständige Liste der verfügbaren Befehle ist hier dokumentiert.
Hilfe und CLI-Dokumentation anzeigen
Der help Befehl gibt die CLI-Dokumentation aus und listet alle verfügbaren Befehle auf:
docker run -i -t --rm [...] vcdb-tool[:TAG] help
help COMMAND gibt die CLI-Dokumentation für einen bestimmten Befehl aus:
docker run -i -t --rm [...] vcdb-tool[:TAG] help import
docker run -i -t --rm [...] vcdb-tool[:TAG] help export
docker run -i -t --rm [...] vcdb-tool[:TAG] help delete
# ...
Falls der Befehl Unterbefehle hat, kann help SUBCOMMAND für die Beschreibung des Unterbefehls verwendet werden:
docker run -i -t --rm [...] vcdb-tool[:TAG] import help citygml
Mounts für den Datenaustausch
Die meisten vcdb-tool Operationen wie Importe und Exporte erfordern ein gemountetes Verzeichnis, um Daten zwischen dem Host-System
und dem Container auszutauschen. Die Optionenen -v oder --mount können mit dem docker run
Befehl verwendet werden, um ein Verzeichnis oder eine Datei einzubinden. Das standardmäßige Arbeitsverzeichnis innerhalb des Containers ist /data.
-
Linux
-
Windows CMD
# Mount von /my/data/ auf dem Host-System nach /data
docker run -i -t --rm --name vcdb-tool \
-v /my/data/:/data \
vcdb-tool[:TAG] COMMAND
# Mount von C:\my\data auf dem Host-System nach /data
docker run -i -t --rm --name vcdb-tool ^
-v "C:\my\data:/data" ^
vcdb-tool[:TAG] COMMAND
| Bei der Arbeit mit Mounts muss darauf geachtet werden, dass alle Verzeichnisse und Dateipfade, die an die vcdb-tool CLI übergeben werden, aus der Perspektive des Containers angegeben werden. Für weitere Informationen zur Verwendung von Docker-Volumes oder Bind-Mounts lesen Sie bitte den Docker Volume Leitfaden. |
Interaktive Konsole
Um eine interaktive Konsolensitzung für den Container zu öffnen, verwenden Sie die Optionen -i und -t zusammen mit docker run.
Dies ist besonders nützlich, wenn das VCDB-Passwort interaktiv eingegeben
werden soll, anstatt es in der Kommandozeile anzugeben. Verwenden Sie für diesen Fall die Option -p von vcdb-tool ohne Wert,
wie im folgenden Beispiel gezeigt.
-
Linux
-
Windows CMD
docker run -i -t --rm --name vcdb-tool \
-v /my/data/:/data \
vcdb-tool[:TAG] import citygml \
-H my.host.de -d citydb -u postgres -p -- \
mycity.gml
docker run -i -t --rm --name vcdb-tool ^
-v "C:\my\data:/data" ^
vcdb-tool[:TAG] import citygml ^
-H my.host.de -d citydb -u postgres -p -- ^
mycity.gml
Umgebungsvariablen
Der empfohlene Weg, Verbindungsparameter für die VCDB-Instanz an den vcdb-tool Container zu übergebenm, ist das Setzen von Umgebungsvariablen. Die folgenden Umgebungsvariablen werden von vcdb-tool unterstützt:
| Umgebungsvariable | Beschreibung |
|---|---|
|
Hostname des VCDB Datenbankservers. |
|
Port des VCDB Datenbankservers. |
|
Name der VCDB-Instanz, zu eine Verbindung hergestellt werden soll. |
|
Schema, das beim Verbinden zur VCDB verwendet werden soll. |
|
Benutzername für die Verbidung zur VCDB. |
|
Passwort für die Verbindung zur VCDB. |
|
Datenbankspezifische Verbindungsparameter als kommaseparierte Liste von |
| Umgebungsvariablen können zusammen mit Kommandozeilenoptionen und Konfigurationsdateien verwendet werden. Sie haben jedoch die niedrigste Priorität und werden von diesen Alternativen überschrieben. Weitere Informationen zur Verwendung von Umgebungsvariablen mit vcdb-tool finden Sie hier. |
Benutzerverwaltung und Dateiberechtigungen
Beim Austausch von Dateien zwischen dem Host-System und dem vcdb-tool Container ist es wichtig, dass Datei- und
Verzeichnisberechtigungen korrekt gesetzt sind. Aus Sicherheitsgründen (siehe Docker Best Practices)
läuft das vcdb-tool standardmäßig als Non-Root Benutzer innerhalb des Containers. Der Standardbenutzer ist ubuntu mit einer Benutzer- und
Gruppen-ID (UID, GID) von 1000.
-
Linux
-
Windows CMD
docker run --rm --entrypoint bash vcdb-tool[:TAG] \
-c "cat /etc/passwd | grep $(whoami)"
# ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
docker run --rm --entrypoint bash vcdb-tool[:TAG] ^
-c "cat /etc/passwd | grep $(whoami)"
# ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
Da 1000 die Standard-UID/GID für den ersten Benutzer auf vielen Linux-Distributionen ist, treten in der Regel keine
Berechtigungsprobleme auf, da der Host-Benutzer meist mit dem Container-Benutzer übereinstimmt. Sollten dennoch Probleme mit Dateiberechtigungen
auftreten, kann der vcdb-tool Container mit einem anderen Benutzer ausgeführt werden, indem die Option -u des docker run Befehls verwendet wird.
Dies stellt sicher, dass erzeugte Dateien im gemounteten Verzeichnis den richtigen Eigentümer und korrekte Dateiberechtigungen haben.
Das folgende Beispiel zeigt, wie Sie die Option -u verwenden, um die Benutzer- und Gruppen-ID Ihres aktuellen Host-Benutzers
unter Linux- und UNIX-ähnlichen Systemen zu übergeben.
docker run --rm --name vcdb-tool \
-u $(id -u):$(id -g) \
-v /my/data/:/data \
vcdb-tool[:TAG] COMMAND
Beispiele
Die nachfolgenden Beispiele setzen voraus, dass eine VCDB v5 Instanz eingerichtet und in Betrieb ist. Für eine
Verbindung mit dieser Instanz werden die unten angegebenen Verbdinungsparameter angenommen:
VCDB-Hostname: my.host.de VCDB-Port: 5432 VCDB-Name: citydb VCDB-Benutzername: postgres VCDB-Passwort: changeMe
Import von CityGML-Dateien
Dieser Abschnitt beinhaltet Beispiele für den Import von CityGML-Dateien. Eine ausführliche Dokumentation des vcdb-tool
import Befehls finden Sie hier.
Um die CityGML-Datei /my/data/mycity.gml vom Host-System in die oben angegebene VCDB-Instanz zu importieren,
kann der folgende Befehl verwendet werden:
-
Linux
-
Windows CMD
docker run --rm --name vcdb-tool \
-v /my/data/:/data \
vcdb-tool[:TAG] import citygml \
-H my.host.de -d citydb -u postgres -p changeMe \
mycity.gml
docker run --rm --name vcdb-tool ^
-v "C:\my\data:/data" ^
vcdb-tool[:TAG] import citygml ^
-H my.host.de -d citydb -u postgres -p changeMe ^
mycity.gml
Da das Host-Verzeichnis /my/data/ auf das standardmäßige Arbeitsverzeichnis /data innerhalb des Containers gemountet ist,
kann die Eingabedatei auch einfach über den Dateinamen anstelle eines absoluten Pfads angegeben werden.
|
Der folgende Befehl importiert alle CityGML-Dateien im Verzeichnis /my/data/ auf dem Host-System in die VCDB-Instanz:
-
Linux
-
Windows CMD
docker run --rm --name vcdb-tool \
-v /my/data/:/data \
vcdb-tool[:TAG] import citygml \
-H my.host.de -d citydb -u postgres -p changeMe \
/data/
docker run --rm --name vcdb-tool ^
-v "C:\my\data:/data" ^
vcdb-tool[:TAG] import citygml ^
-H my.host.de -d citydb -u postgres -p changeMe ^
/data/
Export von CityGML-Dateien
Um alle in der angegebenen VCDB-Instanz gespeicherten Daten in eine einzelne CityGML-Datei /my/data/output.gml
zu exportieren, kann der unten stehende Befehl verwendet werden. Eine ausführliche Dokumentation des vcdb-tool export Befehls
finden Sie hier.
-
Linux
-
Windows CMD
docker run --rm --name vcdb-tool \
-v /my/data/:/data \
vcdb-tool[:TAG] export citygml \
-H my.host.de -d citydb -u postgres -p changeMe \
-o output.gml
docker run --rm --name vcdb-tool ^
-v "C:\my\data:/data" ^
vcdb-tool[:TAG] export citygml ^
-H my.host.de -d citydb -u postgres -p changeMe ^
-o output.gml
Kombination von VCDB und vcdb-tool Containern
Dieses Beispiel zeigt, wie die Docker-Images der VCDB und von vcdb-tool gemeinsam verwendet werden können. Es führt durch den Prozess der Erstellung und Einrichtung eines VCDB-Containers, des Import eines CityGML-Testdatensatzes und anschließend des Export der Daten im CityGML- und CityJSON-Formaten.
Im Beispiel wird der CityGML 2.0 Datensatz railway_scene_lod3_v2.zip verwendet, der mit vcdb-tool ausgeliefert wird. Er befindet sich im
Unterordner samples/datasets des Installationsverzeichnisses. Dieser Datensatz verwendet das Koordinatenreferenzsystem (CRS)
EPSG:25833. Sie können aber auch jeden anderen CityGML-Datensatz Ihrer Wahl verwenden.
|
Vorbereitung des Docker-Netzwerks
Der erste Schritt besteht darin, ein Docker-Netzwerk mit dem Namen vcdb-net zu erstellen. Alle in diesem Beispiel verwendeten Container werden über die
Option --network von docker run mit diesem Netzwerk verbunden. Durch dieses Setup können Container-Namen als Hostnamen
verwendet werden, was eine direkte Kommunikation zwischen vcdb-tool und dem VCDB-Datenbankcontainer ermöglicht.
docker network create vcdb-net
| Docker bietet viele Netzwerkoptionen zur Verbindung von Containern. Weitere Informationen finden Sie in der Docker Netzwerk-Übersicht. |
Einrichten des VCDB-Containers
Nun kann eine VCDB-Instanz mithilfe des VCDB Docker-Images erstellt werden. Der Container erhält
den Namen vcdb (Zeile 3), wird mit dem zuvor erstellten Netzwerk verbunden (Zeile 4) und verwendet die SRID des Testdatensatzes
als Datenbank-CRS (Zeilen 6-7).
-
Linux
-
Windows CMD
docker run -t -d --name vcdb \
--network vcdb-net \
-e POSTGRES_PASSWORD=changeMe \
-e SRID=25833 \
-e SRS_NAME="urn:ogc:def:crs,crs:EPSG::25833,crs:EPSG::5783" \
vcdb-pg[:TAG]
docker run -t -d --name vcdb ^
--network vcdb-net ^
-e POSTGRES_PASSWORD=changeMe ^
-e SRID=25833 ^
-e SRS_NAME="urn:ogc:def:crs,crs:EPSG::25833,crs:EPSG::5783" ^
vcdb-pg[:TAG]
Nach dem erfolgreichen Ausführen des obigen Befehls ist der VCDB-Container mit den folgenden Eigenschaften einsatzbereit:
SRID: 25833 SRS-Name: urn:ogc:def:crs,crs:EPSG::25833,crs:EPSG::5783 VCDB-Name: postgres VCDB-Schema: citydb VCDB-Benutzername: postgres VCDB-Passwort: changeMe
Um dies zu überprüfen, kann das Konsolenprotkoll des VCDB-Cntainers abgerufen werden:
docker logs vcdb
Import des Testdatensatzes
Als nächstes wird der Testdatensatz railway_scene_lod3_v2.zip mit dem vcdb-tool Docker-Image in die VCDB importiert. Um den
Datensatz im Containers verfügbar zu machen, wird das Verzeichnis, das die Datei enthält, über die Option -v
oder --mount auf den Pfad /data eingehängt, wie oben beschrieben.
-
Linux
-
Windows CMD
docker run -i -t --rm --name vcdb-tool \
--network vcdb-net \
-v /my/data/:/data \
vcdb-tool[:TAG] import citygml \
-H vcdb \
-d postgres \
-u postgres \
-p changeMe \
railway_scene_lod3_v2.zip
docker run -i -t --rm --name vcdb-tool ^
--network vcdb-net ^
-v "C:\my\data:/data" ^
vcdb-tool[:TAG] import citygml ^
-H vcdb ^
-d postgres ^
-u postgres ^
-p changeMe ^
railway_scene_lod3_v2.zip
Export der Testdaten als CityGML
Nachdem der Testdatensatzes erfolgreich in den VCDB-Container importiert wurde, können die Daten als CityGML 3.0 exportiert werden.
Wie beim import Befehl muss auch hier sichergestellt werden, dass das Zielverzeichnis auf dem Host-System im Container eingebunden ist.
Unter Linux wird außerdem empfohlen, den vcdb-tool Container mit derselben UID/GID wie der Host-Benutzer auszuführen, um
Berechtigungsprobleme mit den exportierten Dateien zu vermeiden.
-
Linux
-
Windows CMD
docker run -i -t --rm --name vcdb-tool \
-u "$(id -u):$(id -g)" \
--network vcdb-net \
-v /my/data/:/data \
vcdb-tool[:TAG] export citygml \
-H vcdb \
-d postgres \
-u postgres \
-p changeMe \
-o output.gml
docker run -i -t --rm --name vcdb-tool ^
--network vcdb-net ^
-v "C:\my\data:/data"" ^
vcdb-tool[:TAG] export citygml ^
-H vcdb ^
-d postgres ^
-u postgres ^
-p changeMe ^
-o output.gml
Export der Testdaten als CityJSON
Wird eine Ausgabe im CityJSON-Format bevorzugt, muss einfach der Befehl export cityjson verwendet werden
und der Name der Ausgabedatei entsprechend angepasst werden.
-
Linux
-
Windows CMD
docker run -i -t --rm --name vcdb-tool \
-u "$(id -u):$(id -g)" \
--network vcdb-net \
-v /my/data/:/data \
vcdb-tool[:TAG] export cityjson \
-H vcdb \
-d postgres \
-u postgres \
-p changeMe \
-o output.json
docker run -i -t --rm --name vcdb-tool ^
--network vcdb-net ^
-v "C:\my\data:/data"" ^
vcdb-tool[:TAG] export cityjson ^
-H vcdb ^
-d postgres ^
-u postgres ^
-p changeMe ^
-o output.json