Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
client:container [2021/09/14 17:40 CEST] – [Nvidia Nsight] risenman | client:container [2021/12/27 16:35 CET] (aktuell) – bißchen Kosmetik chr |
---|
====== bwLehrpool Container-Integration ====== | ====== bwLehrpool Container-Integration ====== |
| |
Mit dem Projekt [[:bwgpul|bwGPUL]] wurde ein Docker-Container-Service in bwLehrpool integriert, der das native Linux-System bwLehrpools (MaxiLinux) mit nutzerspezifischen Applikationen erweitern kann. Durch Wegfall einer Virtualisierungsschicht steht hierbei die volle Leistung der bwLehrpool-Clients zur Verfügung. Eventuell vorhandene leistungsfähige GPUs (Grafikkarten) werden ebenfalls direkt angesprochen. Der Arbeitsablauf zur Erstellung einer containerbasierten Lehrveranstaltung entspricht dem üblichen Vorgehen beim Einsatz virtueller Maschinen. Aktuell werden nur Docker-Container unterstützt. | Mit dem Projekt [[:bwgpul|bwGPUL]] wurde ein Docker-Container-Service in bwLehrpool integriert, der das native Linux-System bwLehrpools (MaxiLinux) mit nutzerspezifischen Applikationen erweitert. Durch Wegfall der Virtualisierungsschicht steht hierbei die volle Leistung der bwLehrpool-Clients zur Verfügung. Eventuell vorhandene leistungsfähige GPUs (Grafikkarten) können direkt angesprochen werden. Der Arbeitsablauf zur Erstellung einer containerbasierten Lehrveranstaltung entspricht dem üblichen Vorgehen beim Einsatz virtueller Maschinen. Aktuell werden nur Docker-Container unterstützt. |
| |
In dieser Anleitung wird beschrieben, wie Docker-Container im bwLehrpool-Kontext erstellt und in Veranstaltungen verlinkt werden. Eine kompletter Leitfaden zum Umgang mit Docker kann hier nicht gegeben werden; weitere Informationen zu Docker finden Sie in der [[https://docs.docker.com/reference/|Docker-Referenz]]. | In dieser Anleitung wird beschrieben, wie Docker-Container im bwLehrpool-Kontext erstellt und in Veranstaltungen verlinkt werden. Eine kompletter Leitfaden zum Umgang mit Docker kann hier nicht gegeben werden; weitere Informationen zu Docker finden Sie in der [[https://docs.docker.com/reference/|Docker-Referenz]]. |
==== Auswahl des Imagetyps ==== | ==== Auswahl des Imagetyps ==== |
| |
[{{ :bwsuite:container:bwlp_suite_new_image.png?400|bwLehrpool-Suite: Auswahl zwischen VM und Container}}]Den Wizard zur Erstellung eines Docker-Abbildes erreichen Sie nach Auswahl per Schaltfläche „Neues Docker-Image“ (siehe Abb. rechts). | [{{ :bwsuite:container:211118_bwlp_suite_new_image.png?320|bwLehrpool-Suite: Auswahl zwischen VM und Container}}]Den Wizard zur Erstellung eines Docker-Abbildes erreichen Sie nach Auswahl der Schaltfläche „Neues Docker-Image“ (siehe Abb. rechts). |
| |
<note important>Bitte beachten Sie eventuelle Warnungen unter „Hinweis“. Überprüfen Sie gegebenenfalls wie [[https://www.bwlehrpool.de/wiki/doku.php/client/bwlehrpool-suite#menueleiste|hier beschrieben]], ob eine neue Version der bwLehrpool-Suite zur Verfügung steht.</note> | <note important>Bitte beachten Sie eventuelle Warnungen unter „Hinweis“. Überprüfen Sie gegebenenfalls wie [[https://www.bwlehrpool.de/wiki/doku.php/client/bwlehrpool-suite#menueleiste|hier beschrieben]], ob eine neue Version der bwLehrpool-Suite zur Verfügung steht.</note> |
{clear} | {clear} |
| |
==== Anlegen des Container-Image ==== | ==== Anlegen des Container-Images ==== |
| |
[{{ :bwsuite:container:bwlp_suite_new_image_container.png?400|bwLehrpool-Suite: Container-Image erstellen}}] | [{{ :bwsuite:container:211118_bwlp_suite_new_image_container.png?320|bwLehrpool-Suite: Container-Image erstellen}}] |
Für die Erstellung eines Container-Images stehen Ihnen verschiedene Möglichkeiten zur Auswahl. Sie können dabei das Image bauen lassen (aus einem Dockerfile oder über ein Git-Repository) oder auf bestehende Abbilder aus einem Image-Repositorium zurückzugreifen (beispielsweise auf [[https://hub.docker.com/|Docker Hub]]). | Zur Erstellung eines Container-Images stehen Ihnen zwei Möglichkeiten zur Auswahl. Sie können Ihr selbstgebautes Image als Docker-Archive exportieren und hochladen, oder auf bestehende Abbilder aus einem Image-Repositorium, beispielsweise [[https://hub.docker.com/|Docker Hub]]), zurückgreifen. |
| |
- Falls eins eigenen Images gebaut werden soll, nutzten Sie die Eingabeoptionen „Dockerfile“ oder „Git Repository“. | <html><!-- Vielleicht gibt es später die entsprechenden Funktionen um Containr Images mit Dockerfiles zu bauen... |
* Dockerfile: Nutzten Sie hierzu die Anleitung https://docs.docker.com/engine/reference/builder/ um ein eigenes Dockerfile zu erstellen. | |
* Git Repository: Für komplexere Images können Sie auch, entsprechend der [[https://docs.docker.com/engine/reference/commandline/build/|Docker-Build-Anleitung]] einen Link auf ein Git Repository angeben. Hierdurch ist es beispielsweise möglich weitere Dateien wie eine Konfiguration oder Skripte dem endgültigen Image hinzuzufügen. | |
- Soll ein bestehendes Image von Docker Hub verwendet werden, geben Sie lediglich den Repository-Namen an. (z.b. python:3.7, tensorflow/tensorflow:nightly-gpu-jupyter, etc.). | |
- Vergeben Sie einen Namen für Ihre Definition eines Container-Images | |
| |
<note important>Der Bau von Container-Images findet derzeit noch auf Clients statt. Sollte dies zu viel Zeit in Anspruch nehmen, können Sie dem Upload auch ein vorgebautes Container-Image hinzufügen ([[https://docs.docker.com/engine/reference/commandline/save/|docker save]]). Das Bauen eines Images soll in einem späteren Schritt im bwLehrpool System erfolgen </note> | - Falls ein eigenes Images gebaut werden soll: Verwenden Sie die Eingabeoptionen „Dockerfile“ oder „Git Repository“. |
| * Dockerfile: Zum Erstellen eines eigenen Dockerfiles: Anleitung [[https://docs.docker.com/engine/reference/builder/|Docker-Referenz]]. |
| * Git-Repository: Für komplexere Images können Sie auch entsprechend der [[https://docs.docker.com/engine/reference/commandline/build/|Docker-Build-Anleitung]] einen Link auf ein Git-Repository angeben. Hierdurch ist es beispielsweise möglich, dem endgültigen Image weitere Dateien wie Konfigurationen oder Skripte hinzuzufügen. |
| --></html> |
| |
| - Docker-Archive ist die bevorzugte Methode, um in bwLehrpool Container-Images anzulegen. Exportieren Sie Ihr erstelltes Image mit [[https://docs.docker.com/engine/reference/commandline/save/|docker save]] und fügen Sie es dem Upload hinzu. |
| - Soll ein bestehendes Image von Docker Hub verwendet werden, geben Sie lediglich den Repository-Namen an (z.b. python:3.7, tensorflow/tensorflow:nightly-gpu-jupyter, etc.). |
| - Geben Sie Ihrem Container-Image einen sprechenden Namen. |
| |
==== Metadaten, Container-Typ ==== | |
| |
[{{ :bwsuite:container:bwlp_suite_new_image_container_meta.png?direct&400|}}] | <note tip>Docker-Archive profitieren aktuell von [[satellite:dnbd3_lokales_caching|lokalem Caching]].</note> |
| |
Zuletzt geben Sie wie gewohnt dem Container-Image eine Beschreibung und legen den Typ des Container-Image fest. | <note important>Die Dateiendung für Docker-Archive muss für die bwLehrpool-Suite **.tar** lauten, ansonsten werden die Dateien in der Auswahl nicht angezeigt.\\ \\ Prüfen Sie nach dem Exportieren eines Containers-Images ("//docker save ...//"), ob das erstellte Docker-Archive passende Dateiberechtigungen besitzt. Eventuell besitzt die Datei Root-Rechte und kann daher nicht in der Suite ausgewählt werden.</note> |
| |
| |
| ==== Metadaten, Container-Typ ==== |
| |
| [{{ :bwsuite:container:bwlp_suite_new_image_container_meta.png?direct&320|}}] Geben Sie im letzten Schritt dem Container-Image eine Beschreibung und legen den Typ des Container-Image fest. |
| |
=== Beschreibung === | === Beschreibung === |
| |
Vergeben Sie dem Image eine aussagekräftige Beschreibung mit Informationen wie: | Vergeben Sie dem Image eine aussagekräftige Beschreibung mit Informationen wie: |
* Welches Quell-Image wird benutzt und von wo es stammt. | * Welches Quell-Image benutzt wird, von wo es stammt, |
* Welche Anwendung in dem Container enthalten ist und in welcher Version. | * welche Anwendung in welcher Version in dem Container enthalten sind, … |
| |
=== Container-Image-Typ === | === Container-Image-Typ === |
| |
Der Typ eines Container-Images legt fest, wie dieser in Veranstaltungen oder in anderen Systemen genutzt werden soll. Derzeit werden zwei Arten unterstützt: | Der Typ eines Container-Images legt fest, wie dieser in Veranstaltungen oder in anderen Systemen genutzt wird. Derzeit werden zwei Arten unterstützt: |
| |
* Pool(Default): Ein einfaches Container-Image, das rein zur Verwendung auf bwLehrpool-Clientrechnern erstellt wurde. | * Pool (Default): Ein einfaches Container-Image, das rein zur Verwendung auf bwLehrpool-Clients erstellt wurde. |
* Daten: Ein spezielles Container-Images, das nur Daten enthält. Beispielsweise können so einen Daten-Container mit Trainingsdaten für Machine-Learning (Mnist, ImageNet, CIFAR, ...) bereitstellen. | * Daten: Ein spezielles Container-Image, das nur Daten enthält. Beispielsweise können so Daten-Container mit Trainingsdaten für Machine-Learning (Mnist, ImageNet, CIFAR, ...) separat bereitgestellt werden. |
| <note important>Daten für einen Daten-Container müssen derzeit unter **/data/** abgelegt werden! Verwenden Sie zur Erstellung von Daten-Containern kleine Basis-Images wie [[https://hub.docker.com/_/alpine|Alpine]] oder [[https://hub.docker.com/_/busybox|BusyBox]]</note> |
| |
<html><!-- | <html><!-- Batch-System bezieht seine Container von eigener Container-Registry |
* Pool/Batch: Ein modifiziertes Container-Image, das sowohl für Lehrveranstaltungen auf bwLehrpool-Clientrechnern als auch für das neue bwLehrpool-Cluster-System verwendet werden kann. (**todo:** bwlp-cluster side and link) | * Pool/Batch: Ein modifiziertes Container-Image, das sowohl für Lehrveranstaltungen auf bwLehrpool-Clients als auch für das neue bwLehrpool-Cluster-System verwendet werden kann. (**todo:** bwlp-cluster side and link) |
--></html> | --></html> |
| |
Nach Angabe der Beschreibung und des gewünschten Imagetyps können Sie wie gewohnt mittels „Weiter“ die Zugriffsberechtigungen Ihres Containers festlegen oder direkt per „Fertigstellen“ die Konfiguration abschließen. | Nach Angabe der Beschreibung und des gewünschten Imagetyps können Sie wie gewohnt mittels „Weiter“ die Zugriffsberechtigungen Ihres Containers festlegen oder direkt per „Fertigstellen“ die Konfiguration abschließen. |
| |
| |
===== Veranstaltungen mit Docker-Container ===== | ===== Veranstaltungen mit Docker-Container ===== |
| |
Damit ein erstelltes Container-Image in einer Veranstaltung genutzt werden kann, muss die Veranstaltung mit einem Abbild verknüpft werden. Der Vorgang zur Erstellung hat sich im Vergleich zum Umgang mit „normalen“ VMs nicht wesentlich geändert. | Damit ein erstelltes Container-Image in einer Veranstaltung genutzt werden kann, muss eine Veranstaltung erstellt und das Abbild damit verknüpft werden. Der Vorgang hat sich im Vergleich zum Umgang mit „normalen“ VMs nicht wesentlich geändert. |
| |
==== Konfiguration des Containers ==== | ==== Konfiguration des Containers ==== |
| |
[{{ :bwsuite:container:bwlp_suite_lecture_container_details.png?direct&400|Veranstaltungsdetails Containerkonfiguration}}] | [{{ :bwsuite:container:bwlp_suite_lecture_container_details.png?direct&320|Veranstaltungsdetails Containerkonfiguration}}] |
| |
Nachdem die Veranstaltung mit einem Container Image angelegt ist, muss durch eine spezifische Konfiguration das Startverhalten des Containers festgelegt werden. Hierzu befindet sich in Detailansicht der neuen Veranstaltung im Untermenü „Container“ eine Eingabemaske. Hier kann das Verhalten des Containers durch die Menüpunkte „Container-Startoptionen“, „Container-Startbefehl“ sowie eine Mount-Konfiguration angepasst werden. | Nachdem eine auf ein Container-Image verlinkende Veranstaltung angelegt wurde, muss das Startverhalten des Containers festgelegt werden. Hierzu befindet sich in der Detailansicht der neu erstellten Veranstaltung im Untermenü „Container“ eine Eingabemaske. Dort kann das Verhalten des Containers durch die Menüpunkte „Container-Startoptionen“, „Container-Startbefehl“ sowie eine Mount-Konfiguration angepasst werden. |
| |
* **Container-Startoptionen**: Geben Sie hier die zur Ausführung Ihres Containers nötigen Parameter an, beispielsweise <code>-itd -p 8888:8888 --name container-name</code>. Nutzen Sie die [[https://docs.docker.com/engine/reference/commandline/run/#options|Docker Dokumentation]] als ausführliche Referenz zum Festlegen der Optionen. | * **Container-Startoptionen**: Geben Sie hier die zur Ausführung Ihres Containers nötigen Parameter an, beispielsweise <code>-itd -p 8888:8888 --name container-name</code>. Die [[https://docs.docker.com/engine/reference/commandline/run/#options|Docker-Dokumentation]] bietet eine ausführliche Referenz zum Festlegen der Optionen. |
| |
* **Container-Startbefehl**: Bei der Erstellung eines Containers wird durch die im Dockerfile enthaltenen Angaben ENTRYPOINT bzw. CMD festgelegt, welche und wie die Containeranwendung gestartet wird. Durch Überschreiben dieser Angaben können Sie das Verhalten der genutzten Anwendung Ihren Wünschen entsprechend anpassen (siehe [[https://docs.docker.com/engine/reference/builder/|Dockerreferenz]]). | * **Container-Startbefehl**: Bei der Erstellung eines Containers wird durch die im Dockerfile enthaltenen Angaben ENTRYPOINT bzw. CMD festgelegt, welche und wie die Containeranwendung gestartet wird. Durch Überschreiben dieser Angaben können Sie das Verhalten der genutzten Anwendung Ihren Wünschen entsprechend anpassen (siehe [[https://docs.docker.com/engine/reference/builder/|Dockerreferenz]]). |
| |
* **Bind Mount-Konfiguration**: Geben Sie hier die Verzeichnisse an, die in den Container hineingemountet werden sollen. Unter „SOURCE“ finden Sie vordefinierte Labels für eine Quelle. „USER_HOME“ stellt das Home Verzeichnis des angemeldeten Users dar, „USER_TMP“ einen Bereich in /tmp. Die Buchstaben sind als Laufwerkbuchstaben zu betrachten und referenzieren ein Netzlaufwerk, das in den Veranstaltungsdetails festgelegt werden kann. „TARGET“ stellt das Zielverzeichnis innerhalb des Containers dar, in das die Quelle gemountet wird. Weitere Informationen zur Anwendung von Bind Mounts finden Sie in der Docker-Dokumentation. | * **Bind Mount-Konfiguration**: Durch Anlegen von Bind Mounts wird festgelegt, welche Verzeichnisse aus dem Host-System und/oder interne Docker-Speicherbereiche (Volumes) im Container unter einem festgelegten Dateipfad eingehängt werden. Dabei sind eine Quelle (Source) und ein Ziel (Target) zwingend erforderlich, optional können zusätzliche Optionen das Verhalten im Container beeinflussen (z.b. READ_ONLY). Weitere Informationen zu Bind Mounts finden Sie in der [[https://docs.docker.com/storage/bind-mounts/|Docker-Dokumentation]]. Derzeit können Sie nur vordefinierte Labels als Quelle auswählen, diese sind wie folgt definiert: |
| * //USER_HOME// stellt das Home Verzeichnis des angemeldeten Users dar. |
| * //USER_TMP// stellt dem User ein temporäres Verzeichnis zum Austausch unter ///tmp/docker/<USERNAME>/// bereit. |
| * //Buchstaben// referenzieren den Laufwerksbuchstaben eines Netzlaufwerks, das in den Veranstaltungsdetails festgelegt werden kann. |
| * //Daten-Container// referenziert ein zuvor hochgeladenes Container-Image, das als Type Daten-Container markiert wurde. |
| |
==== Zusätzliche Einstellungen ==== | ==== Zusätzliche Einstellungen ==== |
* **Netzlaufwerke**: Hier können Netzlaufwerke hinzugefügt werden, die im Basissystem eingebunden werden. Diese können dann über den Laufwerksbuchstaben für Bind Mounts referenziert und so in den Container durchgereicht werden. | * **Netzlaufwerke**: Hier können Netzlaufwerke hinzugefügt werden, die im Basissystem eingebunden werden. Diese können dann über den Laufwerksbuchstaben für Bind Mounts referenziert und so in den Container durchgereicht werden. |
| |
* **VM-Start**: Wie sonst auch kann hier ein Skript abgelegt werden. Bei „normalen“ VM-Veranstaltungen wird das Skript direkt nach dem Start der VM ausgeführt. Bei Veranstaltungen, die einen Container beinhalten, wird analog dazu zuerst der Container gestartet und anschließend das Skript ausgeführt. So können beispielsweise Programme gestartet werden, die mit der Anwendung aus dem Container kommunizieren. //**Hinweis**//: Andere Einstellungen in diesem Konfigurationsfenster werden im Kontext von Container ignoriert. | * **VM-Start**: Wie sonst auch kann hier ein Skript abgelegt werden. Bei „normalen“ VM-Veranstaltungen wird das Skript direkt nach dem Start der VM innerhalb der VM ausgeführt. Bei Veranstaltungen, die einen Container beinhalten, wird analog dazu zuerst der Container gestartet, das abgelegte Skript aber im Grundsystem unter der Kennung der angemeldeten Userin ausgeführt. So können beispielsweise Programme gestartet werden, die mit im Container befindlichen Anwendungen kommunizieren. //**Hinweis**//: Andere Einstellungen in diesem Konfigurationsfenster werden im Container-Kontext ignoriert. |
| |
| |
==== Container-Veranstaltungen auf bwLehrpool-Client ==== | ==== Container-Veranstaltungen auf bwLehrpool-Client ==== |
| |
[{{ :bwsuite:container:bwlp_client_example_lecture.png?direct&400|Start der Containeranwendung auf einem bwLehrpool-Client}}] | [{{ :bwsuite:container:bwlp_client_example_lecture.png?direct&320|Start der Containeranwendung auf einem bwLehrpool-Client}}] |
| |
Nach dem Start einer Container-Veranstaltung wird der Desktop des nativen Linux gestartet und der Container mit den Veranstaltungsdetails initialisiert. Im aktuellen Entwicklungsstand öffnet sich nach Start der Desktopoberfläche ein Terminal, in dem der aktuelle Fortschritt der Initialisierung angezeigt wird. | Nach dem Start einer Container-Veranstaltung wird der Desktop des nativen Linux gestartet und der Container mit den Veranstaltungsdetails initialisiert. Im aktuellen Entwicklungsstand öffnet sich nach Start der Desktopoberfläche ein Terminal, in dem der aktuelle Fortschritt der Initialisierung angezeigt wird. |
| |
Bei der Initialisierung wird das Image gebaut, bzw. geladen oder aus einer Container-Registry gepullt. Im Bild ist beispielhaft eine Initialisierungsphase dargestellt, in der ein vorgebautes Image geladen wird, auch ist bereits die erfolgreich gestartete Containeranwendung zu sehen ([[https://developer.nvidia.com/nsight-eclipse-edition|Nvidia Nsight Eclipse Edition]]). Muss das Container-Image noch gebaut werden, wird zuerst Build-Prozess angestoßen. Die benötigte Zeit, um das Image zu bauen, hängt hierbei von mehreren Faktoren ab (Größe des Basis-Image, Anzahl und Komplexität der nachfolgenden Instruktionen im Dockerfile, Netzwerkgeschwindigkeit, etc.). | Bei der Initialisierung wird das Image gebaut bzw. geladen oder aus einer Container-Registry gezogen. In nebenstehendem Bild ist beispielhaft eine Initialisierungsphase zu sehen, in der ein vorgebautes Image geladen wurde und die erfolgreich gestartete Containeranwendung zu sehen ist ([[https://developer.nvidia.com/nsight-eclipse-edition|Nvidia Nsight Eclipse Edition]]). Zuerst wird der Build-Prozeß anghestoßen, falls das Container-Image noch gebaut werden muß. Die zum Bau des Images benötigte Zeit hängt hierbei von mehreren Faktoren wie Größe des Basis-Images, Anzahl und Komplexität der Instruktionen im Dockerfile, Netzwerkgeschwindigkeit usw. ab |
| |
| |
===== Beispielkonfigurationen ===== | ===== Beispielkonfigurationen ===== |
| |
Nachfolgend soll anhand einer Beispielkonfiguration der Einstieg in Container Lehrveranstaltungen geschaffen werden. Zudem sollen Informationen und erste Erfahrungen mit grafischen Containeranwendungen vermittelt werden. | Nachfolgend soll anhand einer Beispielkonfiguration ein Einstieg in Container-Lehrveranstaltungen gezeigt und Informationen zu grafischen Containeranwendungen vermittelt werden. |
==== Beispielkonfiguration - Tensorflow ==== | ==== Beispielkonfiguration - Tensorflow ==== |
| |
In diesem ersten Beispiel soll exemplarisch für den Bereich Machine Learning das Framework Tensorflow mit GPU Unterstützung und der Juptyer Notebook IDE bereit gestellte werden. Über die bwLehrpool-Suite muss hierbei zuerst das Container-Image angelegt, und dann mit einer Veranstaltung verknüpft werden. Folgende Schritte sind dabei auszuführen: | Im ersten Beispiel soll exemplarisch für den Bereich Machine Learning das Framework Tensorflow mit GPU Unterstützung und der Juptyer Notebook-IDE bereit gestellt werden. Mit der bwLehrpool-Suite wird hierbei zuerst das Container-Image angelegt und dann mit einer Veranstaltung verknüpft. Folgende Schritte sind hierzu auszuführen: |
| |
- Container-Image in bwLehrpool-Suite angelegen: | - Container-Image in bwLehrpool-Suite angelegen: |
* Image Repository ''tensorflow/tensorflow:2.3.3-gpu-jupyter'' (Docker-Hub) | * Image Repository: ''tensorflow/tensorflow:2.3.3-gpu-jupyter'' (Docker-Hub) |
* Container Name: ''Tensorflow 2.3 GPU Jupyter'' | * Container-Name: ''Tensorflow 2.3 GPU Jupyter'' |
- Danach wird auf Grundlage dieses Images eine Veranstaltung angelegt. | - Danach wird auf Grundlage dieses Images eine Veranstaltung angelegt: |
- Veranstaltungsname: ''Machine Learning mit Tensorflow'' | - Veranstaltungsname: ''Machine Learning mit Tensorflow'', |
- In den Veranstaltungsdetails im Untermenü //Container// werden die folgenden Einstellungen gesetzt: | - in den Veranstaltungsdetails im Untermenü //Container// folgende Einstellungen setzen: |
* Container-Startoptionen: <code>-itd --rm --name bwlp-tensorflow-gpu --gpus all -p 127.0.0.1:8888:8888</code> | * Container-Startoptionen: <code>-itd --rm --name bwlp-tensorflow-gpu --gpus all -p 127.0.0.1:8888:8888</code> |
* Container-Startbefehl: <code>jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token='easyPw'</code> | * Container-Startbefehl: <code>jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token='easyPw'</code> |
* Bind Mount Configuration: | * Bind Mount-Konfiguration: |
* **SOURCE** USER_HOME **TARGET** /tf/user_home | * **SOURCE** USER_HOME **TARGET** /tf/user_home |
- Danach ist die eigentliche Konfiguration der Veranstaltung mit dem Container abgeschlossen. Jedoch startet der Container nur eine Webanwendung, daher will man zusätzlich noch ein Browser mit der entsprechenden URL zu der Webanwendung starten. Dies erreicht man mit dem folgenden Skript in dem Untermenü //VM-Start// | - Damit ist die eigentliche Konfiguration der Container-Veranstaltung abgeschlossen. Jedoch startet der Container lediglich eine Webanwendung, daher sollte zusätzlich ein Browser mit entsprechender URL zur Webanwendung gestartet werden. Dies erreicht man mit folgendem Skript im Untermenü //VM-Start//: |
* Skript:<code>#!/bin/bash | * Skript:<code>#!/bin/bash |
sleep 2 | sleep 2 |
| |
| |
| ==== Grafische Containeranwendungen ==== |
| |
| Wie in der vorherigen Abbildung angedeutet, können mit Containern Anwendungen mit grafischer Oberfläche, die auf Direktzugriff zur GPUs angewiesen sind, in Container ausgelagert und in Lehrveranstaltungen verwendet werden. Als Beispiel zur Abbildung wurde eine Eclipse-IDE zur CUDA-Programmierung (Nvidia Nsight) verwendet. |
| |
==== Grafische Containeranwendung ==== | Zur Verwendung solcher Container, die grafischen Anwendungen beinhalten, existieren mehrere Lösungsmöglichkeiten. Die erste Option ist hierbei das X11-Forwarding mittels eines in den Container gemounteten X11-Sockets, über den die grafische Oberfläche direkt dargestellt werden kann. Ein zweiter Lösungsansatz besteht in der Verwendung einer rudimentären Desktopumgebung innerhalb des Containers wie beispielsweise Openbox, auf die mit VNC zugegriffen wird. Der Zugriff auf diese Umgebung erfolgt dann schließlich über den Browser, in dem die Anwendung angezeigt wird. (**??**) |
| |
Wie in der vorherigen Abbildung gezeigt, ist es mit Container auch möglich Anwendungen mit einer grafischen Oberfläche diese in ein Image auszulagern und diese in Lehrveranstaltungen zu verwenden, welche auf GPUs angewiesen sind. Für eine solche Veranstaltung musste in der Entwicklungsphase solch ein Container erstellt werden. Die Anwendung war hierbei eine spezifische Eclipse IDE für die CUDA-Programmierung (Nvidia Nsight). Dieses Vorgehen erlaubte eine erfolgreiche Durchführung einer Laboreinheit mit Studierende. | === X11-Forwarding === |
| |
Für die Realisierung solcher Container mit grafischen Anwendungen existieren mehrere Lösungsmöglichkeiten. Die erste Option ist hierbei das X11-Forwarding, in welcher der X11-Socket in den Container gemountet wird und somit in der Lage ist grafische Oberflächen direkt darzustellen. Ein zweiter Lösungsansatz ist die Erstellung einer rudimentären Desktopumgebung beispielsweise mit OpenBox und eines VNC-Ansatzes. Der Zugriff auf diese Umgebung erfolgt dann schließlich über den Browser, in dem die Anwendung angezeigt wird. | Hierzu muss im Container die auszuführende Anwendung sowie deren Abhängigkeiten installiert sein. Damit die im Container befindliche Anwendung auf dem Bildschirm dargestellt wird, müssen bei Containererzeugung folgende Parameter angegeben werden: |
| |
=== X11-Forwarding === | |
| |
Für diesen Ansatz muss im Container lediglich die auszuführende Anwendung sowie dessen Abhängigkeiten installiert sein. Damit die Anwendung aus dem Container auf dem Bildschirm dargestellt wird, müssen lediglich die folgenden Parameter bei Containererzeugung angegeben sein: | |
<code> docker run ... -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix/ ...</code> | <code> docker run ... -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix/ ...</code> |
Nach einem erfolgreichen Start des Containers mit der Anwendung, sollte diese dann auf dem Desktop zu sehen sein. Der [[https://nelkinda.com/blog/xeyes-in-docker/|Blogbeitrag]] wurde hierbei als Referenz für den eigenen Ansatz genutzt. | |
| |
<note important>**Sicherheitshinweis**: Wie in der [[https://nelkinda.com/blog/xeyes-in-docker/|Referenz]] bereits hingewiesen ist, sollte nach diesem Vorgehen nur Software genutzt werden, welcher Sie vertrauen.</note> | Nach erfolgreichem Start des Containers sollte diese dann auf dem Desktop angezeigt werden. Vergleichen Sie hierzu auch „Running X11 applications like xeyes in Docker“, [[https://nelkinda.com/blog/xeyes-in-docker/|Quelle]]. |
| |
| <note important>**Sicherheitshinweis**: Da auf diesem Wege X11 u.a. Maus- und Tastatureingaben abgefangen werden könnten, sollten Sie hierfür nur vertrauenswürdige Software verwenden!</note> |
| |
| |
=== VNC-Ansatz === | === VNC-Ansatz === |
| |
Der Konfigurationsaufwand bei diesem Lösungsansatz ist bei der Erstellung des Container-Images wesentlich höher. Hierbei müssen unterschiedliche Aspekte des Desktops sowie der VNC-Verbindung installiert und konfiguriert werden. Die Erstellung des eigenen Images wurde nach dem [[https://www.digitalocean.com/community/tutorials/how-to-remotely-access-gui-applications-using-docker-and-caddy-on-debian-9|Tutorial von Digital Ocean]] erstellt. Für den Zugriff auf die spezielle Desktopumgebung mit der Anwendung muss lediglich darauf geachtet werden, dass der konfigurierte VNC-Port erreichbar ist. | Dieser Lösungsansatz erfordert deutlich höheren Konfigurationsaufwand, da unterschiedliche Aspekte des Desktops sowie der VNC-Verbindung konfiguriert werden müssen. Als Beispielanleitung hierfür empfiehlt sich das [[https://www.digitalocean.com/community/tutorials/how-to-remotely-access-gui-applications-using-docker-and-caddy-on-debian-9|Tutorial]] „How to remotely access GUI applications using Docker“. Für den Zugriff auf die Desktopumgebung mit der Anwendung muss darauf geachtet werden, dass der konfigurierte VNC-Port erreichbar ist. |
<code> docker run ... -p 8080:VNC_PORT ...</code> | <code> docker run ... -p 8080:VNC_PORT ...</code> |
| |
| <note important>Da Container in der Regel nicht die für die grafische Umgebung notwendigen Bibliotheken beinhalten, werden diese bei der Installation der eigentlichen Anwendung mitinstalliert. Daher nimmt der Bau des Container-Images mehr Zeit in Anspruch. Zudem erhöht sich hierbei die Größe des resultierenden Images. Daher sollten solche Images derzeit noch vorgebaut in bwLehrpool hochgeladen werden.</note> |
<note important>Da Container in der Regel nicht die grafischen Bibliotheken besitzen, werden diese ebenfalls bei der Installation der eigentlichen Anwendung mitinstalliert. Das führt dazu, dass der Bau von Container-Images mehr Zeit in Anspruch nimmt. Zudem erhört sich hierbei auch enorm die Größe des resultierenden Images. Daher sollten solche Images derzeit noch vorgebaut in bwLehrpool hochgeladen werden.</note> | |
| |
==== Ressourcen ==== | ==== Ressourcen ==== |
| |