Docker unter Windows

Docker ist eine spezielle Art von Software, die es erlaubt wiederum andere Software in einem abgesicherten Container auszuführen. Während Virtualisierungslösungen wie VMWare oder VirtualBox auf eine voll-virtualisierte Umgebung bauen, lagert Docker einen Teil (den Hypervisor) in das Betriebssystem aus und man kann damit schlankere virtuelle Umgebungen bereitstellen.

Kann ich Docker installieren und ausführen ?

Im Gegensatz zu anderen Virtualisierungslösungen ist die Installation von Docker etwas herausfordender. Wenn Docker aber erst einmal installiert ist, ist die Verwendung recht annehmbar. Leider ist die erste Beschränkung bereits, dass aktuelle Docker Versionen erst ab Windows 10 verfügbar sind.

Zuerst sollte man daher testen, ob das System Docker ausführen kann. Hierzu öffnet man den Ausführen-Dialog unter Windows 10 (auch Windows-Taste+R) und gibt dort „msinfo32“ ein. Am Ende der ersten Seite (Summary) sollten folgende Systemunterstützungen vorhanden sein:

Ausgabe: msinfo32

Sollte die Hyper-V Unterstützung vorhanden sein, kann Docker unter Windows 10 installiert werden. Sollte Docker bereits installiert worden sein, die Hyper-V Unterstützung aber fehlen wird man wie folgt konfrontiert:

Die Kontrolle zeigt auf diesem Beispielsystem dann die fehlende Unterstützung:

Ausgabe: msinfo32 (2)

Docker selbst kann unter https://docs.docker.com/docker-for-windows/install heruntergeladen werden. Weiterhin werden weitere Voraussetzungen auf der Seite angegeben:

  • Unterstützung ab Windows 10 pro, Education oder Enterprise (Build 16299)
  • Hyper-V / Container Unterstützung
  • Hardware-Voraussetzungen
    • 64bit Prozessor (mit Second-Level Address Translation Unterstützung)
    • 4GB RAM
    • Virtualisierungsunterstützung im BIOS aktiviert

Docker starten

Ist Docker installiert, muss Docker mit privilegiertem Zugriff als Dienst gestartet werden:

Systemmeldung: Der Docker Dienst ist noch nicht gestartet.

Zusätzlich muss der Benutzer, der Docker verwenden möchte in die Windows-Gruppe „docker-users“ gesetzt werden. Ansonsten mäkelt das System:

Systemmeldung: Benutzer nicht in der docker-users Gruppe

Fallstricke

Sollte Docker Desktop bereits gestartet sein, jedoch unter einem anderen Benutzer verwendet werden, kann auch folgende Meldung erscheinen:

Systemmeldung: Docker Desktop läuft schon …

Grundsätzlich ist das kein Problem. Denn Docker funktioniert trotzdem in der Shell. Die GUI bleibt einem aber so verwehrt. Zusätzlich könnte das Freigeben von Resourcen und Ordnern so zu einem Problem werden, wenn diese nicht explizit vom Hauptbenutzer erlaubt werden.

Access denied, bei Fehlenden Berechtigungen.

Sind jedoch alle Hürden genommen, dürfen wir loslegen:

Systemmeldung: Docker lädt zum testen ein…

Docker ausführen und verwenden

Das wird zugleich in der Powershell ausprobiert und ein Docker-Image geladen (Vorsicht Beispiel-Image ist sehr groß: Alternativ zu verwenden: ubuntu:latest):

docker pull svekre/anaconda3

Im laufenden Betrieb kann das System in der Powershell auf vorhandene Images kontrolliert werden:

docker images

Nachdem das Herunterladen des Images erfolgreich war testen wir das Image mit docker run:

docker run -i -t --rm svekre/anaconda3 /bin/bash

Letztendlich können wir über das Symbol in der unteren Taskleiste sogar eine GUI verwenden um unsere Container-Instanzen zu verwalten (Dashboard):

Starten des Dashboards über das Taskleisten-Symbol von Docker (Walfisch mit Containern)
laufendes Docker-Dashboard mit aktiver Container-Instanz des svekre/anaconda3 Images.

Einfacher Start eines Docker Containers

Um ein Image als Container-Instanz zu verwenden ruft man docker mit dem Image wie folgt auf (Ist das Image nicht vorhanden, versucht docker das Image zu holen):

docker run -i -t --rm debian:latest

Daraufhin kann in der Shell, des Containers gearbeitet werden. Alle Änderungen am System sind flüchtig und werden nicht gespeichert.

Die aktiven Container-Instanzen können wie folgt kontrolliert werden:

docker ps

Für die Ansicht aller Instanzen wird docker ps mit -a verwendet

docker ps -a

Starten des Jupyter Notebooks der Anaconda-Umgebung

Um das geladene Image voll zu nutzen testen legen wir einen Ordner unter C:\users\<name>\notebooks an, den wir mit dem Container-internen Ordner /opt/notebooks verknüpfen. Weiterhin leiten wir den Container-internen Port 8888 des Notebooks weiter, so dass unser Windows-Browser den Zugriff auf das Notebook bekommt:

docker run -i -t -p 8888:8888 -v "C:\Users\<name>\notebooks:/opt/notebooks" svekre/anaconda3:latest /bin/bash -c "jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser"

Docker Optionen

Damit man mit seinen Daten arbeiten kann, muss man Docker mitteilen welche Ordner man mit Docker teilen möchte. Auf diesem Weg kann man Daten im Container nutzen und hat die Daten auch nach Beendigung des Containers noch verfügbar. Dabei hilft –volume oder -v

Der Container-Folder wird erstellt und muss noch nicht vorhanden sein.

docker run -i -t -v "Windows-Folder:Container-Folder" <Image> /bin/bash -c "Shell Command"

Beispiel:

docker run -it -v "C:\temp:/wintemp" ubuntu:latest

Ändern des Images

Sollte man den Drang verspüren, sein Image zu bearbeiten – So können nach Belieben innerhalb des Images Änderungen vorgenommen werden. Solange das Image aktiv ist, können die Änderungen über docker commit gespeichert werden.

Dazu wird die ID des Docker-Containers bestimmt:

docker ps -a

Und anhand der ID, ein commit für ein neues Image durchgeführt

docker commit <ID> <neuer-Imagename>

Alternativ kann das gesamte Image gesichert werden (z.B. auf einen USB-Stick):

docker save <image> >/shared_folder/image.tar.gz

Have fun.