{"id":2259,"date":"2023-09-10T08:58:53","date_gmt":"2023-09-10T06:58:53","guid":{"rendered":"https:\/\/linux-bibel.at\/?p=2259"},"modified":"2023-09-10T08:58:55","modified_gmt":"2023-09-10T06:58:55","slug":"grafische-anwendungen-unter-docker-installieren-und-nutzen-linux","status":"publish","type":"post","link":"https:\/\/linux-bibel.at\/index.php\/2023\/09\/10\/grafische-anwendungen-unter-docker-installieren-und-nutzen-linux\/","title":{"rendered":"Grafische Anwendungen unter Docker installieren und nutzen &#8211; Linux"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Bisher haben wir uns auf der Linux Bibel nur auf dem\u00a0Terminal\u00a0basierende Anwendungen mittels\u00a0<a href=\"https:\/\/linux-bibel.at\/index.php\/2023\/09\/10\/docker-anwendungen-und-systeme-unter-linux-virtualisieren-isolieren\/\" data-type=\"post\" data-id=\"2174\" target=\"_blank\" rel=\"noreferrer noopener\">Docker<\/a>\u00a0angesehen &#8211; wir haben also Docker installiert und darin textbasierte Anwendungen installiert und genutzt. Des Weiteren haben wir einige Server-Anwendungen, wie etwa\u00a0Focalboard\u00a0oder das ERP-System\u00a0Dolibarr.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nun, man muss nicht unbedingt einen Server brauchen, um Docker sinnvoll nutzen zu k\u00f6nnen. Nehmen wir einmal an, Sie haben am Rechner Ubuntu installiert &#8211; Sie brauchen jedoch eine grafische Anwendung von Manjaro, oder Fedora &#8211; weil es diese unter Ubuntu nicht gibt.<br>Nat\u00fcrlich k\u00f6nnte man jetzt eine VM erstellen, oder die gew\u00fcnschte Distribution real auf demselben Rechner neben Ubuntu installieren. Ist halt sehr aufwendig, kostet Zeit und Ressourcen.<br>Stattdessen erstellt man sich ganz einfach sein eigenes Docker-Image, installiert darin die gew\u00fcnschte Anwendung und reicht die grafische Oberfl\u00e4che an das real installierte System durch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dies funktioniert ganz einfach und innerhalb weniger Minuten &#8211; und die Anwendung starten Sie innerhalb von Sekunden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Docker-Image erstellen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Als Erstes m\u00fcssen wir einmal wissen &#8211; welche Distribution wollen wir nutzen, zus\u00e4tzlich m\u00fcssen wir uns mit der Paket-Verwaltung dieser Distribution auskennen &#8211; wie sie am Terminal funktioniert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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 &#8211; in diesem erstellen wir eine Textdatei namens &#8222;<strong>dockerfile<\/strong>&#8220; &#8211; ohne Dateiendung. Der Inhalt sieht in diesem Fall so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM ubuntu\nRUN apt update\nRUN apt install -y gedit\nRUN useradd -m user\nUSER 1000\nCMD gedit<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Mit der ersten Zeile &#8222;<strong>FROM ubuntu<\/strong>&#8220; legen wir die Distribution fest &#8211; diese soll Docker als Image herunterladen. Es folgt die Zeile &#8222;<strong>RUN apt update<\/strong>&#8220; &#8211; das heruntergeladene Ubuntu soll die Paket-Quellen aktualisieren und mit &#8222;<strong>RUN apt install -y gedit<\/strong>&#8220; wird das Paket &#8222;<strong>gedit<\/strong>&#8220; installiert. Innerhalb von Docker-Images arbeiten wir automatisch als root &#8211; also mit\u00a0administrativen Rechten\u00a0&#8211; dies wollen wir nat\u00fcrlich in diesem Fall nicht &#8211; wir erstellen einen unterpriviligierten Nutzer namens &#8222;<strong>user<\/strong>&#8220; mit der Zeile &#8222;<strong>RUN useradd -m user<\/strong>&#8222;. Dieser User braucht nat\u00fcrlich auch eine User-ID &#8211; diese ist im Beispiel einfach &#8222;<strong>1000<\/strong>&#8220; &#8211; &#8222;<strong>USER 1000<\/strong>&#8222;. Jetzt f\u00fchren wir noch die installierte grafische Anwendung aus &#8222;<strong>CMD gedit<\/strong>&#8222;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mit dieser Datei k\u00f6nnen 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 &#8222;<strong>gedit<\/strong>&#8220; nennen. Wir \u00f6ffnen das Terminal im Verzeichnis mit der erstellten Datei &#8222;<strong>dockerfile<\/strong>&#8220; und nutzen den Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker build -t gedit .<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Das Ubuntu-Image wird heruntergeladen, aktualisiert und die gew\u00fcnschte Software installiert &#8211; als Ergebnis erhalten wir zwei Images &#8211; &#8222;<strong>ubuntu<\/strong>&#8220; und &#8222;<strong>gedit<\/strong>&#8222;. Ersteres enth\u00e4lt das Ubuntu-System, das zweite die installierte Anwendung &#8222;<strong>gedit<\/strong>&#8220; &#8211; zweiteres m\u00fcssen wir starten, um die Software auszuf\u00fchren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Die grafische in Docker installierte Anwendung an das real installierte System durchreichen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">W\u00fcrden wir die grafische Anwendung einfach so im Docker-Image starten, erhalten wir nur Fehlermeldungen &#8211; wir m\u00fcssen die grafische Software &#8211; in diesem Fall Gedit an das real installierte System durchreichen, um diese nutzen zu k\u00f6nnen. Hier m\u00fcssen wir unterscheiden, ob wir den X-Server nutzen oder Wayland. Dies erfahren wir im Falle des Falles durch den Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo $XDG_SESSION_TYPE<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jeder Befehl wird nun als normaler Benutzer gestartet &#8211; wir haben ja einen Benutzer ohne administrative Rechte gestartet.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Unter dem X-Server:<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -it --rm -e DISPLAY -v \/tmp\/.X11-unix -v $HOME:\/home\/nutzername gedit<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wichtig hier &#8211; der Eintrag &#8222;<strong>\/home\/nutzername<\/strong>&#8220; &#8211; hiermit geben Sie Ihr eigenes Home-Verzeichnis an, mit &#8222;<strong>gedit<\/strong>&#8220; geben Sie das zu startende Docker-Image an &#8211; in diesem Beispiel also &#8222;<strong>gedit<\/strong>&#8222;.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Unter Wayland:<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -it --rm -e XDG_RUNTIME_DIR -v $HOME:$HOME -v \/run\/user\/1000\/wayland-0:\/run\/user\/1000\/wayland-0 gedit<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hier m\u00fcssen Sie so gesehen gar nichts anpassen.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">In beiden Befehlen geben wir unser eigenes Home-Verzeichnis an &#8211; unter X mit &#8222;<strong>\/home\/nutzername<\/strong>&#8220; und unter Wayland mit &#8222;<strong>:$HOME<\/strong>&#8220; &#8211; dies dient dazu, auch auf die Dateien im real installierten System zugreifen zu k\u00f6nnen. Im Beispiel:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/docker-image-1024x576.jpg\" alt=\"\" class=\"wp-image-2260\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/docker-image-1024x576.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/docker-image-300x169.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/docker-image-768x432.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/docker-image-1536x864.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/docker-image.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Man muss sich zwar erst \u00fcber &#8222;<em>Andere Orte \u2192 Dateisystem \u2192 \/home\/nutzer\/<\/em>&#8220; durchhangeln, aber es funktioniert anstandslos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt k\u00f6nnen Sie auf dieselbe Art mit einem angepassten Dockerfile nat\u00fcrlich auch weitere Anwendungen installieren &#8211; das Ubuntu-Image bleibt erhalten &#8211; muss es ja auch &#8211; Sie erstellen nur ein weiteres Image mit der n\u00e4chsten gew\u00fcnschten Anwendung, nur das neu erstellte Image belegt dann weiteren Platz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier dieselbe Geschichte mit Nautilus &#8211; dem Dateimanager von GNOME:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/docker-image-1-1024x576.jpg\" alt=\"\" class=\"wp-image-2261\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/docker-image-1-1024x576.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/docker-image-1-300x169.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/docker-image-1-768x432.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/docker-image-1-1536x864.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/docker-image-1.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In Ubuntu k\u00f6nnen Sie nat\u00fcrlich auch PPAs integrieren, dies muss nat\u00fcrlich schon im Docker-Image mittels &#8222;<strong>RUN<\/strong>&#8222;-Befehl geschehen. Unter Arch oder Manjaro muss erst das AUR aktiviert werden, all dies erledigen Sie im Dockerfile.<\/p>\n<div class=\"pld-like-dislike-wrap pld-custom\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir\" data-post-id=\"2259\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Hoch.png\" alt=\"Gef\u00e4llt mir\" \/>\r\n            <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">1    <\/span>\r\n<\/div><div class=\"pld-dislike-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-dislike-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir nicht\" data-post-id=\"2259\" data-trigger-type=\"dislike\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Runter.png\" alt=\"Gef\u00e4llt mir nicht\" \/>\r\n            <\/a>\r\n    <span class=\"pld-dislike-count-wrap pld-count-wrap\"><\/span>\r\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Bisher haben wir uns auf der Linux Bibel nur auf dem\u00a0Terminal\u00a0basierende Anwendungen mittels\u00a0Docker\u00a0angesehen &#8211; wir haben also Docker installiert und darin textbasierte Anwendungen installiert und genutzt. Des Weiteren haben wir einige Server-Anwendungen, wie etwa\u00a0Focalboard\u00a0oder das ERP-System\u00a0Dolibarr. Nun, man muss nicht unbedingt einen Server brauchen, um Docker sinnvoll nutzen zu k\u00f6nnen. Nehmen wir einmal an, Sie [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2261,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[64,67],"tags":[65,69],"class_list":["post-2259","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-verwalten","category-virtualisierung","tag-software-verwalten","tag-virtualisierung"],"_links":{"self":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/2259","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/comments?post=2259"}],"version-history":[{"count":1,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/2259\/revisions"}],"predecessor-version":[{"id":2262,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/2259\/revisions\/2262"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media\/2261"}],"wp:attachment":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media?parent=2259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/categories?post=2259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/tags?post=2259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}