Linux im GriffNetzwerk & IPWindows

Container – und warum auch Du sie kennen solltest

Mit Containern könnt Ihr superkomplexe Programme in Sekunden einrichten - direkt auf dem Windows-Desktop.

Ja, entschuldigt die cringy Überschrift, aber versucht mal Otto Normalverbraucher auf sowas Cooles wie Docker aufmerksam zu machen ;) Container sind im professionellen IT-Bereich ein wirklich großes Ding. Ganz kurz gesagt liefern sie komplexe Anwendungen, die aus mehreren Programmen samt benötigten Betriebssystem-Teilen bestehen. Zum Beispiel Wordpress: Dafür braucht es eigentlich Linux, Webserver, Datenbankserver, PHP, Wordpress selbst, einiges an Konfiguration, ein, zwei Stündchen Zeit und ein wenig Ahnung. Via Container dauert es hingegen keine 5 Minuten bis man sich in Wordpress einloggen kann - inklusive aller Downloads!

Docker und Container verstehen

Das Thema Container ist durchaus komplex, aber um Container zu nutzen, genügt ein wenig Grundverständnis. Docker ist die Standardsoftware zum Betreiben von Containern, frei verfügbar für Windows, Mac und Linux. Genutzt wird es meist über die Kommandozeile, aber es gibt auch grafische Oberflächen wie zum Beispiel Portainer, das auch in Openmediavault zum Einsatz kommt. Aber ganz ehrlich: Bis Ihr die Oberflächen versteht und Container habt, habt Ihr im Terminal schon längst alles erledigt, Kaffee gekocht, die Wäsche gemacht und ein Romankapitel getippt.

Wenn Ihr keine Lust auf Erklärungen habt und einfach loslegen wollt, wechselt einfach unten in das Kapitel Container nutzen beziehungsweise links in der Navigation zu Hier ist der Spaß!

Container könnt Ihr Euch bezüglich der Nutzung - stark vereinfacht - vorstellen wie die ISO-Images von Linux-Live-Distributionen: So ein Ubuntu-ISO enthält etwa ein virtuelles Dateisystem, darauf installiert ein Ubuntu-Linux und darin wiederum allerlei Anwendungsprgramme wie Browser und Editor. Ein ISO könnt Ihr auf einem Rechner starten und bekommt ein vollständiges Betriebssystem. Ein Container ist im Grunde eine (abgespeckte) Variante davon - nur dass der Container nicht auf einem Rechner gestartet wird wie das ISO, sondern von Docker.

Noch ähnlicher sind Container freilich virtuellen Maschinen. Der große Unterschied: In VMs laufen jeweils ein komplettes (Gast-)Betriebssystem und die gewünschten Programme und Bibliotheken. Container hingegen nutzen einen von Docker für alle Container bereitgestellten Kernel und beinhalten nur darüber hinaus benötigte Programme und Bibliotheken. Das spart Ressourcen. Zudem sind Container darauf ausgelegt, dass sie flüchtig benutzt werden - man kann sie problemlos mal eben löschen und erneut als frisches System starten. Wobei sich Daten durchaus auch permanent speichern lassen, indem etwa lokale Verzeichnisse vom Gastgeber-Betriebssystems eingebunden werden. Container sind einfach agiler als virtuelle Maschinen.

Ganz praktisch gesehen besteht ein Container aus einer Konfiguration und einem Image mit den Programmen und Bibliotheken. Das Schöne daran: Die Konfiguration beschränkt sich häufig auf ein paar simple Optionen beim Startbefehl und Images besorgt Docker automatisch über denselben Befehl. Mal als kleine Vorschau, folgender Befehl ist alles, was Ihr für einen laufenden, nutzbaren Apache-Webserver tun müsst:

docker run -dit -p 80:80 httpd

Und jetzt versucht mal, einen Apache-Server schneller aufzusetzen ;) Aber auch ein komplettes Wordpress-System ist nicht komplizierter aufzusetzen.

Beispiele

Beispiel Ubuntu: Auch Ubuntu gibt es als Container (genauer gesagt als Image für Container). Einmal gestartet, habt Ihr ein fast ganz normales Linux zur Verfügung - allerdings gibt es natürlich keinen Bildschirm! Aber es gibt (mindestens) drei plausible Möglichkeiten, vom Host (Gastgeberrechner, auf dem Docker läuft) auf Programme in den Containern zuzugreifen:

  • Kommandozeile: Ähnlich wie via SSH kann man sich mit dem Container-Ubuntu verbinden.
  • Browser: Web-Programme wie Wordpress erreicht man einfach über Firefox, Chrome & Co.
  • X-Server: Desktop-Programme wie Gimp lassen sich via X-Server wie Xming auf dem Desktop darstellen.

Beispiel Kommandozeile: Ihr könntet Euch zum Beispiel von Windows aus in einer Bash, der Standard-"Eingabeaufforderung" vieler Linuxe, anmelden, um mit Standardwerkzeugen zu experimentieren.

Beispiel Browser: Ob Wordpress nun bei Wordpress.com auf einem Server läuft oder auf Eurem Desktop in einem Container, der Zugriff ist immer gleich - natürlich über den Browser. Weiteren Zugriff auf den Container braucht man in der Regel gar nicht.

Beispiel X-Server: Ihr könntet zum Beispiel einen Browser wie Chrome in einen Container packen und auf dem Windows-Desktop wie den normalen Windows-Chrome-Browser nutzen. Vorteil: Der Container spendiert Sicherheit. Zum einen kann Malware nicht so einfach Schaden anrichten, zum anderen lässt sich ein Container einfach neu starten, um Surfspuren, Cookies und dergleichen loszuwerden. Wobei sich das Browser-Profil auch auf das Gastgebersystem auslagern ließe, um es eben doch permanent zu speichern.

Natürlich brauchen all diese Tools nichtsdestoweniger ein gewisses Maß an Betriebssystem-Teilen. Den Kernel stellt Docker zur Verfügung und das Drumherum ist soweit reduziert, dass sich die Größen in Grenzen halten, aber ein Gigabyte kommt dennoch schnell zusammen. Aber kleiner als eine entsprechende virtuelle Maschine ist es allemal.

Docker installieren

Zunächst müsst Ihr das Windows Subsystem for Linux (WSL) installieren - wie, zeigen wir hier. Das ist die einzige Voraussetzung für Docker Desktop unter Windows. Warum? Nun, wie oben erwähnt, nutzen Container einen gemeinsamen Kernel. Da es sich aber um einen Linux-Container handelt, der unter Windows mit Docker Desktop laufen soll, muss halt noch ein Linux-Kernel bereitgestellt werden, und das läuft eben über WSL. Auf einem Linux-Host bräuchte man für einen Linux-Container freilich nichts weiter zu tun. Zum Verständnis: Früher brauchte Docker Desktop unter Windows eine Installation von VirtualBox, die für die nötigen Linux-Ressourcen gesorgt hat. Wenn Ihr es genauer wissen wollt, schaut in die Dokumentation.

Die Eingabeaufforderung von Windows ist schrecklich, PowerShell auch nicht der Hit - von daher eine klare Empfehlung: Installiert Git for Windows, denn damit bekommt Ihr auch eine ganz normale Bash-Shell, wie sie unter den meisten Linuxen Standard ist.

Docker Desktop selbst installiert Ihr einfach wie gewohnt über einen Doppelklick - nach dem fälligen Neustart erwartet Euch ein Assistent, den Ihr getrost überspringen könnt.

Container nutzen

Nach dem ganzen Blabla und der Installation kommt jetzt endlich der Grund, warum jeder Container und Docker kennen sollte - die Freude der Einfachheit! Sagen wir, Ihr wollt Wordpress installieren. Dazu müsst Ihr zunächst wissen, wie ein passendes Image heißt - also nutzt die Suchfunktion:

docker search wordpress

Erfreulicherweise seht Ihr in den Ergebnissen auch gleich, dass es sich beim Image wordpress um das offizielle Image handelt.

terminal mit docker-suche.
Die Suche im Browser ist komfortabler, aber häufig genügt der Terminal.

Nun, da der Name klar ist, genügt folgender kleiner Befehl:

docker run --name mein-wordpress-blog -p 8080:80 -d wordpress

Anschließend könnt Ihr im Browser localhost:8080 eingeben und schon seht Ihr das Wordpress-Login-Fenster.

run heißt, dass Docker das hinten angegebene Image, hier wordpress, startet - und sofern es nicht bereits lokal vorliegt von dockerhub herunterlädt. Die Option name dürfte selbsterklärend sein. Das -d steht für detached/losgelöst; heißt einfach nur, dass der Terminal danach wieder genutzt werden kann, ansonsten würde der Container im Vordergrund laufen und ihn blockieren.

Interessant ist aber vor allem -p 8080:80: Hier wird festgelegt, dass Port 80 vom Container an Port 8080 auf dem Host geleitet wird. Ihr gebt also im Browser localhost:8080 ein und bekommt, was der Webserver im Container über Port 80 ausgibt.

Nun fragt Ihr Euch vielleicht, warum dieser Port-Kram? Ganz einfach: Der Container hat zwar eine eigene IP-Adresse, diese hat aber nichts mit Eurem echten Netzwerk zu tun. Das Heimnetz wird bei einer Fritzbox vermutlich Adressen im Bereich 192.168.178.XXX liefern. Der Container hat hier aber zum Beispiel die Adresse 172.17.02 und ist damit natürlich nicht über das Fritzbox-LAN zu erreichen. Daher leitet Docker 172.17.02:80 nach 192.168.178.XXX:8080 weiter.

Gimmick: Ihr wollt nicht nur einen Blog aufsetzen, sondern gleich drei auf einmal? Kein Problem:

for i in $(seq 1 3); do docker run --name blog$i -p 808$i:80 -d wordpress; done

Damit bekommt Ihr Container blog1 mit Zugriff über Port 8081 und blog2 mit Port 8082 und natürlich blog3 mit Port 8083. Nett, woll?!

Mehr zu Containern

Wordpress läuft nun also und ich hoffe, Ihr seid ein wenig von Containern angefixt - einfacher war eine Wordpress-Einrichtung jedenfalls noch nie. Aber ein paar Dinge solltet Ihr noch mitnehmen, um beim Einstieg nicht zu verzweifeln:

docker ps
docker images

Das ps-Kommando zeigt die laufenden Container, images die heruntergeladenen Images - darüber bekommt Ihr die IDs (abc123xyz) der Container und Images und könnt diese dann auch stoppen und löschen:

docker stop abc123xyz
docker rm abc123xyz
docker image rm zdf123ard

Generell müsst Ihr Euch um aufgesetzte Container nicht unbedingt kümmern: Sobald Docker Desktop startet, stehen auch alle Container automatisch wieder zur Verfügung (sofern nicht explizit anders konfiguriert). Auch ein Neustart des Betriebssystems ist kein Problem, die Container halten das problemlos aus.

Das ist natürlich nur ein winziger Teil der Docker-Möglichkeiten. Ein wenig mehr seht Ihr im Artikel Apps in Docker-Container packen, am Beispiel Firefox, zum Beispiel, wie man Ordner permanent einbindet und Apps per X-Server auf den Desktop bekommt. Hilfe direkt im Terminal bekommt Ihr über unsere hauseigene Linux-Hilfe cli.help:

curl cli.help/docker

Wenn Ihr keine Lust auf Kommandozeile habt, könnt Ihr Euch auch mal Portainer anschauen. Ich würde allerdings Docker direkt im Terminal empfehlen: Simple Container-Aufgaben sind hier einfacher, gut dokumentiert und dauerhaft zuverlässig. Und es bringt ein deutlich besseres Verständnis für Docker. Portainer entwickelt seine Vorteile eher, wenn die Container-Landschaft größer und komplexer wird.

Und als letzes Argument für Docker und Kommandozeile:

docker exec abc123xyz ip

Mit exec lassen sich Befehle in dem angegebenen Container (abc123xyz) ausführen - hier der Befehl ip. Die Ausgabe landet dann wieder direkt im Terminal, in diesem Fall die IP-Informationen des Containers. So lassen sich einzelne Anwendungen aus Containern sogar für Skripte nutzen. Hübsch, oder?!

Mehr zu Containern.

Übrigens: Am besten laufen Container natürlich auf einem eigenen Rechner, damit die Anwendungen im ganzen Netz rund um die Uhr bereitstehen. Als Server-Hardware für daheim können wir den Klassiker Raspberry Pi empfehlen, alternativ einen MSI Cubi x86-Architektur mit mehr Leistung - hier ein Vergleich.

(* = Affiliate-Link / Bildquelle: Amazon-Partnerprogramm)
×
Produktpreise und -verfügbarkeit sind zum angegebenen Datum / Uhrzeit korrekt und können sich ändern. Alle Preis- und Verfügbarkeitsinformationen auf https://www.amazon.de/ zum Zeitpunkt des Kaufs gelten für den Kauf dieses Produkts.
(* = Affiliate-Link / Bildquelle: Amazon-Partnerprogramm)
×
Produktpreise und -verfügbarkeit sind zum angegebenen Datum / Uhrzeit korrekt und können sich ändern. Alle Preis- und Verfügbarkeitsinformationen auf https://www.amazon.de/ zum Zeitpunkt des Kaufs gelten für den Kauf dieses Produkts.

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Ihr hier mehr über Open Source, Linux und Bastelkram lesen und Tutonaut unterstützen möchtet: Über Kaffeesponsoring via Paypal.freue ich mich immer. Schon mal im Voraus: Danke! Nicht verpassen: cli.help und VoltAmpereWatt.de. Neu: Mastodon

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schaltfläche "Zurück zum Anfang"