Bisher haben wir uns auf der Linux Bibel nur auf dem Terminal basierende Anwendungen mittels Docker angesehen – wir haben also Docker installiert und darin textbasierte Anwendungen installiert und genutzt. Des Weiteren haben wir einige Server-Anwendungen, wie etwa Focalboard oder das ERP-System Dolibarr.
Nun, man muss nicht unbedingt einen Server brauchen, um Docker sinnvoll nutzen zu können. Nehmen wir einmal an, Sie haben am Rechner Ubuntu installiert – Sie brauchen jedoch eine grafische Anwendung von Manjaro, oder Fedora – weil es diese unter Ubuntu nicht gibt.
Natürlich könnte man jetzt eine VM erstellen, oder die gewünschte Distribution real auf demselben Rechner neben Ubuntu installieren. Ist halt sehr aufwendig, kostet Zeit und Ressourcen.
Stattdessen erstellt man sich ganz einfach sein eigenes Docker-Image, installiert darin die gewünschte Anwendung und reicht die grafische Oberfläche an das real installierte System durch.
Dies funktioniert ganz einfach und innerhalb weniger Minuten – und die Anwendung starten Sie innerhalb von Sekunden.
Inhaltsverzeichnis
Docker-Image erstellen
Als Erstes müssen wir einmal wissen – welche Distribution wollen wir nutzen, zusätzlich müssen wir uns mit der Paket-Verwaltung dieser Distribution auskennen – wie sie am Terminal funktioniert.
In diesem Beispiel werde ich mich ganz einfach an Ubuntu halten und darin den Texteditor Gedit installieren. Hierzu erstellen wir als normaler Benutzer an einer beliebigen Stelle im Home-Verzeichnis ein neues leeres Verzeichnis – in diesem erstellen wir eine Textdatei namens „dockerfile“ – ohne Dateiendung. Der Inhalt sieht in diesem Fall so aus:
FROM ubuntu
RUN apt update
RUN apt install -y gedit
RUN useradd -m user
USER 1000
CMD gedit
Mit der ersten Zeile „FROM ubuntu“ legen wir die Distribution fest – diese soll Docker als Image herunterladen. Es folgt die Zeile „RUN apt update“ – das heruntergeladene Ubuntu soll die Paket-Quellen aktualisieren und mit „RUN apt install -y gedit“ wird das Paket „gedit“ installiert. Innerhalb von Docker-Images arbeiten wir automatisch als root – also mit administrativen Rechten – dies wollen wir natürlich in diesem Fall nicht – wir erstellen einen unterpriviligierten Nutzer namens „user“ mit der Zeile „RUN useradd -m user„. Dieser User braucht natürlich auch eine User-ID – diese ist im Beispiel einfach „1000“ – „USER 1000„. Jetzt führen wir noch die installierte grafische Anwendung aus „CMD gedit„.
Mit dieser Datei können wir jetzt das Docker-Image erstellen. Wir arbeiten in diesem Fall mit administrativen Rechten am Terminal. Im Beispiel will ich das neue Docker-Image einfach „gedit“ nennen. Wir öffnen das Terminal im Verzeichnis mit der erstellten Datei „dockerfile“ und nutzen den Befehl:
docker build -t gedit .
Das Ubuntu-Image wird heruntergeladen, aktualisiert und die gewünschte Software installiert – als Ergebnis erhalten wir zwei Images – „ubuntu“ und „gedit„. Ersteres enthält das Ubuntu-System, das zweite die installierte Anwendung „gedit“ – zweiteres müssen wir starten, um die Software auszuführen.
Die grafische in Docker installierte Anwendung an das real installierte System durchreichen
Würden wir die grafische Anwendung einfach so im Docker-Image starten, erhalten wir nur Fehlermeldungen – wir müssen die grafische Software – in diesem Fall Gedit an das real installierte System durchreichen, um diese nutzen zu können. Hier müssen wir unterscheiden, ob wir den X-Server nutzen oder Wayland. Dies erfahren wir im Falle des Falles durch den Befehl:
echo $XDG_SESSION_TYPE
Jeder Befehl wird nun als normaler Benutzer gestartet – wir haben ja einen Benutzer ohne administrative Rechte gestartet.
Unter dem X-Server:
docker run -it --rm -e DISPLAY -v /tmp/.X11-unix -v $HOME:/home/nutzername gedit
Wichtig hier – der Eintrag „/home/nutzername“ – hiermit geben Sie Ihr eigenes Home-Verzeichnis an, mit „gedit“ geben Sie das zu startende Docker-Image an – in diesem Beispiel also „gedit„.
Unter Wayland:
docker run -it --rm -e XDG_RUNTIME_DIR -v $HOME:$HOME -v /run/user/1000/wayland-0:/run/user/1000/wayland-0 gedit
Hier müssen Sie so gesehen gar nichts anpassen.
In beiden Befehlen geben wir unser eigenes Home-Verzeichnis an – unter X mit „/home/nutzername“ und unter Wayland mit „:$HOME“ – dies dient dazu, auch auf die Dateien im real installierten System zugreifen zu können. Im Beispiel:
Man muss sich zwar erst über „Andere Orte → Dateisystem → /home/nutzer/“ durchhangeln, aber es funktioniert anstandslos.
Jetzt können Sie auf dieselbe Art mit einem angepassten Dockerfile natürlich auch weitere Anwendungen installieren – das Ubuntu-Image bleibt erhalten – muss es ja auch – Sie erstellen nur ein weiteres Image mit der nächsten gewünschten Anwendung, nur das neu erstellte Image belegt dann weiteren Platz.
Hier dieselbe Geschichte mit Nautilus – dem Dateimanager von GNOME:
In Ubuntu können Sie natürlich auch PPAs integrieren, dies muss natürlich schon im Docker-Image mittels „RUN„-Befehl geschehen. Unter Arch oder Manjaro muss erst das AUR aktiviert werden, all dies erledigen Sie im Dockerfile.
Noch keine Reaktion