Zu Docker
Docker® ist eine Open-Source-Software, mit der Anwendung und deren zugehörige Abhängigkeiten in ein „Image“ verpackt (gebaut) werden können. Diese Images können dann vom eigentlichen (Betriebs-) System getrennt ausgeführt und validiert werden.
Begriffsklärung
Bevor eine Beschreibung der Integration von GEwAF als Docker-Anwendung ausgeführt wird, ist es aufgrund der unterschiedlichen Bezeichung innerhalb der Docker-Umgebung sinnvoll vorab einige wiederkehrende Begriff zu erläutern:
- Ein Image ist eine bereits kompilierte und daher direkt ausführbare Instanz, die bereits alle Abhängigkeiten beinhaltet, die die auszuführende Anwendung benötigt.
- Ein Container ist eine laufende Instanz eines Images.
- Ein Repository ist eine Sammlung von Images (sowohl online als auch offline bzw. lokal).
- Ein Registry ist eine Sammlung von Repositories.
Wie funktioniert Docker?
Docker basiert auf der Erstellung und Ausführung der sogenannten Images. Diese beinhalten die auszuführende Anwendung (die sehr spezifisch oder auch sehr umfangreich sein kann) und alle Abhängigkeiten, die für die Ausführung der Anwendung notwendig sind, beinhaltet, sodass eine systemunabhängige Ausführung gewährleistet ist. Vorausgesetzt ist dabei immer, dass Docker auf dem Host-System installiert ist. Durch das Bauen eines Containers wird die implementierte Anwendung vom Rest des (Betriebs-) Systems isoliert und kann so systemübergreifend validiert werden.
Docker erlaubt das Entwerfen der Images, die Speicherung lokal oder online im Docker-Hub und die Ausführung der Anwendung durch Starten des Images.
Docker ist eine Terminal-/Kommandozeilen-basierte Anwendung. Zum Erstellen eines Images wird ein entsprechendes Dockerfile
aufgesetzt, dass mit dem Befehl
Die Docker-Systemarchitektur ist von offizieller Seite wie in Abbildung 2 dargestellt definiert. Auf dem gewählten Betriebssystem („Host Operating System) wird Docker verwendet um die entsprechenden Anwendungen (hier: App A-F) auszuführen. Auf die GEwAF-Co-Simulation übertragen entsprechen die Apps beispielsweise den Simulationsinstanzen (s. Abb 3, unten).
Intension Docker-Nutzung für
Mit ROS ist bereits der erste Schritt zu einer Dezentralisierung erreicht. Auf diese Weise kann bereits, durch Festlegung welches Rechnersystem einen ROS-Knoten ausführt, ein verteiltes Netzwerk aufgebaut werden. Durch die Verwendung von Docker wird diese Herangehensweise weiter ausgebaut. Die Anwendungen werden systemunabhängig standardisiert und können damit noch einfacher auf neue Hardwarekomponenten übertragen und dort ausgeführt werden. Zudem wird die mehrfache Ausführung der gleichen Anwedung vereinfacht.
Wesentliche Vorteile bei der Nutzung von Docker in Verbindung mit der GEwAF-Co-Simulation lassen sich wie folgt zusammenfassen:
- Skalierbarkeit: Durch die Nutzung von ROS und dessen Kommunikatinossystem ist die GEwAF-Co-Simulation bereits grundsätzlich komfortable (generisch) ausbaubar. D.h. neue Anwendung in der ROS-Umgebung können einfach in die Kommunikation eingebunden werden. Für die Vervielfachung der Einbindung der gleichen Software ist es durch Docker nochmals einfacher eine Vervielfachung der einzubindenen Instanzen zu erreichen. So kann ein ROS-Knoten als Image erstellt werden, um dann als Container vielfach in einer Docker-Session (parallel) angewandt werden.
- Portierbarkeit Das Image kann systemunabhängig übertragen und ausgeführt werden. Alle Abhängigkeiten sind innerhalb des Images/des Containers eingebunden. Einzige Notwendigkeit ist die Installation von Docker selbst. Komplikationen hinsichtlich der unterschiedlichen Betriebssysteme, die die Projektpartner innerhalb GEwAF nutzen (Windows & Linux) können so gemieden werden.
- Portabilität Durch die mäßige Größe und verschachtelte Verwendung bereits bestehender Images/Container (während des Kompilierungsprozesses) und der Verfügbarkeit via Docker-Hub (Online-Verwaltung der Repositories), können die Container einfach online ausgetauscht und aktualisiert werden.
- Test-/Validierungsmöglichkeiten Die Container laufen isoliert vom Rest des Host-Betriebssystems, d.h. wie bereits zuvor erwähnt, sind alle Abhängigkeiten pro Image/Container in ebendiesen vorhanden, sodass sie nicht auf Resourcen des Host-Betriebssystems zugreifen. So kann die Funktionalität der Anwendung im Hinblick auf Vollständigkeit der benötigten (System-)Ressourcen, Unabhängigkeit und grundlegender Erfüllung der Funktionsaufgabe besser validiert werden.
Integration GEwAF –> Docker
Anwendungsansätze
Grundsätzlich gibt es mehrere Möglichkeiten die gewünschten Docker Images als Container auszuführen, u. a.: das Starten einzelner Instanzen durch Befehlseingabe (Kommandozeilen-Einträge) oder durch das Verwenden einer compose Datei, die zum Bauen eines Anwedungsverbundes verwendet wird.
Container einzeln ausführen
Grundsätzlich lassen sich einzelne Anwendung durch den simplen Terminalbefehl
Container zusammengeführt ausführen
Durch Docker’s compose Funktion kann durch nur einen Befehl eine ganze Reihe von Parameter eingestellt und Anwendungen gestartet werden. Hierzu muss eine docker-compose.yml-Datei im root-Verzeichnis des Docker Verzeichnisses existieren. Mit dem Befehl
GEwAF-Komponenten als Docker-Container
Die Erstellung von Container wurde zunächst für ausgewählte Komponenten der GEwAF-Co-Simulation ausgeführt. Entsprechend Abb. 3 sind das die Instanzen für SUMO und den Synchronisationsmaster sowie der zentrale ROS-Befehl (roscore) zur Etablierung der Kommunikationsplattform (schwarze Umrahmung).
Das ECU-Test-Interface ist als externe und übergeordnete Instanz für die Initialisierung und Automatisierung der Co-Simulation verantwortlich und daher nicht direkt in die Docker-Umgebung eingebunden. MATLAB/Simulink sowie ADTF sind eigenständige Simulationen mit abgeschlossener Laufzeitumgebung und werden somit auch als externe Anwendungen der Co-Simulation zugeschaltet. Die Einbindung des Datamasters erfolgt in einem nächsten Schritt.
Weitere Informationen
- Liste weiterer (grundlegender) Kommandozeilen-Befehle: https://docs.docker.com/engine/reference/commandline/docker/
- Docker: https://www.docker.com/
- SUMO: https://sumo.dlr.de/wiki/Simulation_of_Urban_MObility_-_Wiki
- ROS: http://www.ros.org/
Quellenangaben
Abb. 1: Whale-Logo is a Docker® Trademark (https://www.docker.com/) Abb. 2: Docker System-Architektur: https://www.docker.com/resources/what-container