Linux als Virtuelle Maschine auf dem Windows-Desktop? Alter Hut! Profis greifen immer häufiger zu den alternativen Containern. Und das funktioniert auch wunderbar auf dem Desktop: Es verbraucht weniger Resourcen als eine VM und die Einrichtung ist deutlich einfacher und schneller erledigt.
Wie funktionieren Docker-Container?
Wen juckt schon die Theorie, aber mal ganz grundsätzlich: Container sind grob gesagt geschlossene Behälter für Anwendungen samt aller Ressourcen, die diese brauchen - also komplette Laufzeitumgebungen. Soll heißen, es könnte ein Firefox in einer Ubuntu-Umgebung sein. Im Unterschied zu einer virtuellen Maschine muss hier aber nicht erst ein Betriebssystem installiert werden, der Container ist fix und fertig. Überhaupt, hier läuft nicht zwangsläufig ein komplettes Ubuntu, vielmehr werden nur die für die Anwendung benötigten Teile in den Container gepackt. Für einen Datenbankserver bräuchte man beispielsweise keine grafische Desktop-Umgebung. Aber Container-Theorie findet Ihr woanders, hier gibt es den Einstieg durch Praxis.
Im Endeffekt bekommt Ihr auf Wunsch aber auch ein reguläres Ubuntu auf den Windows-Desktop, das Ihr ähnlich nutzen könnt, wie eine VM. Wenn Ihr dauerhaft ein Linux parallel nutzt, bleibt lieber bei VMs. Sie sind dafür gedacht und Dinge wie Speichern, externe Hardware etc. schlicht einfacher und besser zu lösen. Die Docker-Variante ist super, wenn ihr nur eine bestimmte Anwendung aus der Linux-Welt benötigt. Oder wenn Ihr zwischendurch immer mal wieder ein Linux zum Testen und Herumspielen braucht. Oder wenn Ihr einfach mal diese recht neue Technologie ausprobieren wollt.
Kleine Vorschau: Im Folgenden seht Ihr, wie Ihr einen Docker-Container, hier am Beispiel Ubuntu mit XFCE-Desktop, herunterladet und startet, seine IP-Adresse auslest und letztlich die Desktop-Oberfläche aufruft. Anschließend werden noch Änderungen gespeichert, exportiert und nach Windows kopiert.
1. Docker installieren
Zunächst besorgt Euch Docker für Windows, installiert das Programm inklusive VirtualBox und startet den Docker-Terminal über die Verknüpfung auf dem Desktop.
2. Docker bedienen
Docker läuft jetzt schon und Ihr könnt Befehle absetzen. Zum Anfang solltet Ihr zum Beispiel das Docker-Repository durchsuchen, eine Plattform, über die Ihr direkt Container beziehen könnt:
docker search ubuntu
Ihr bekommt eine Liste mit Containern. Sucht Euch einen heraus, bei dem VNC vorkommt - später verbindet Ihr Euch dann mit einem VNC-Client (VNC ist Software für den Fernzugriff auf Rechner, zum Beispiel zum Warten). Startet also mit beispielsweise:
docker run -it -d welkineins/ubuntu-xfce-vnc-desktop
docker, run und der beispielhafte Container-Name welkineins/ubuntu-xfce-vnc-desktop verstehen sich wohl von selbst - der XFCE-Desktop funktioniert übrigens sehr gut. -it ist für interaktive Anwendungen obligatorisch - die Details könnt Ihr bei Bedarf in der Docker-Doku nachschlagen. Wichtig ist aber das -d, das für Detached steht. Dadurch wird der gestartete Container vom Terminal "abgekoppelt", sprich der Prompt ist wieder frei. Anmerkung: An dieser Stelle könnt Ihr auch das Netzwerk einrichten, braucht Ihr aber nicht - leider. Mit der Option --network=host könntet Ihr den Container einfach über die IP des lokalen Rechners erreichen, das funktioniert aber nur unter Linux. Mehr zur IP weiter unten.
Wenn alles gut gelaufen ist, ist eigentlich kaum etwas passiert und der Prompt blinkt wieder fröhlich.
3. Container-ID herausfinden
Um den Container ansprechen zu können, braucht Ihr dessen ID. Lasst einfach alle Container über
docker ps
auflisten - die ID ist die Zeichenfolge vorne. Jetzt könntet Ihr den Container auch mit
docker stop 11aa22bb33
stoppen, wenn 11aa22bb33 die ID wäre.
4. IP-Adresse herausfinden
Die IP-Adresse bekommt Ihr nun genauso wie üblich unter Linux, mit dem ifconfig-Befehl - allerdings muss der ja in dem Container ausgeführt werden:
docker exec 11aa22bb33 ifconfig
Über exec lasst Ihr beliebige Befehle im Container aufführen, die Ausgabe erfolgt direkt im Docker-Terminal. Und in der Ausgabe findet Ihr bei eth1 eine IP-Adresse, die in den ersten beiden Blöcken Eurem normalen Heimnetz entsprechen sollte. Für den Fritzbox-Quasi-Standard 192.168.178.1 könnte das zum Beispiel 192.168.99.100 sein.
5. Ubuntu aufrufen
Installiert nun den Open-Source-VNC-Client UltraVNC (oder irgendeinen anderen), startet das Programm und tragt die gefundene IP-Adresse ein - über einen Klick auf den Connect-Button sollte dann ein XFCE-Desktop im Fenster aufpoppen. Oder hier im Bild ein LXDE-Desktop:
6. Container-Zustand speichern und laden
Die Docker-Gemeindes sollte jetzt weghören, folgendes gilt als schlechter Stil: Wenn Ihr einen Container stoppt, gehen alle Änderungen verloren. Aber man kann mit einem Befehl ein neues Image aus dem geänderten, laufenden Container erstellen:
docker commit 11aa22bb33 mein-neues-image
Dann könnt Ihr die Images mit
docker images
alle Images auflisten lassen und das eben erstellte Image später über
docker run -d network=host abcde12345
starten, wenn abcde12345 die Image-ID ist. Alternativ könnt Ihr natürlich auch den Namen des neuen Images verwenden.
Das Ganze war jetzt natürlich eine ziemliche Kurzform - aber erfahrungsgemäß macht es mehr Spaß, sich in sowas reinzufrickeln, wenn es überhaupt erstmal läuft. Einen netten Gedanken zu den Containern aber noch zum Schluss: Eine VM ist eine VM ist eine VM. Das Image könnt Ihr aber beliebig häufg als Container starten - dann laufen eben 10 XFCE-Ubuntus völlig unabhänig voneinander. Und auf Wunsch könntet Ihr dann auch 10 Backup-Images speichern - aber genau da kommt der schlechte Stil ins Spiel. Solche Dinge lassen sich natürlich auch elegant erledigen :)
Nachtrag: Images nach Windows exportieren
Das wäre noch ein wichtiger Aspekt: Wie kommt nun ein neues Image als portable Container-Datei auf mein Windows-System? Ganz einfach:
docker save -o mein-neues-image.tar mein-neues-image
erstellt aus dem oben per commit erstellten Image mein-neues-image per Output-Option (-o) die Datei mein-neues-image.tar im aktuellen Ordner. Zum Verschieben dieser Datei in das Windows-Dateteisystem:
cp mein-neues-image.tar c:/mein-ordner
Und ja, das / ist Absicht! Die normale Windows-Schreibweise mit Backslash funktioniert hier nicht. Ansonsten könnt Ihr aus der Docker-Umgebung aber auch auf das normale Windows-Dateisystem zugreifen. (Das ganze Dateisystem ist hier etwas freakig: Offensichtlich ist die Docker-Umgebung ja mit MinGW64 aufgesetzt, was gaaaanz grob gesagt und unter anderem eine unix-artige Shell zur Verfügung stellt. Und wenn Ihr hier mit ls den Ordnerinhalt aufführen lasst, seht Ihr sowohl Dateien aus dem Windows-Verzeichnis, als auch einige Dateien, die nur hier vorhanden sind - unter Windows sind sie nicht zu sehen. Aber das nur am Rande :) )