Docker auf Windows? Jetzt mit dem Lernen beginnen oder…!

Wenn Sie neu im Umgang mit Containern und Docker sind und hauptsächlich mit Windows arbeiten, haben Sie etwas Besonderes vor sich. In diesem Artikel lernen Sie, wie Sie Docker unter Windows 10 mit Docker Desktop für Windows oder einfach als Docker Desktop bezeichnet, einrichten.

Docker Desktop ist der Docker Engine und ein Verwaltungsclient, die zusammen für die einfache Verwendung unter Windows 10 verpackt sind. In diesem Artikel werden Sie Docker Desktop installieren, Ihren ersten Container bereitstellen und Daten zwischen Ihrem Host und Ihren Containern teilen.

Voraussetzungen für Docker unter Windows

In diesem Artikel werden verschiedene Schritte in Docker Desktop für Docker unter Windows beschrieben. Um mitzumachen, stellen Sie sicher, dass Sie einige spezifische Anforderungen erfüllen.

  • Eine Internetverbindung zum Herunterladen von über 800 MB Daten
  • Windows 10 64-Bit in der Pro-, Enterprise- oder Education-Edition mit Version 1703 oder neuer. Dies ist erforderlich, um Hyper-V unter Windows 10 auszuführen.
  • A CPU with SLAT (nested paging) compatibility. All AMD/Intel processors since approximately 2008 are SLAT compatible
  • Mindestens 4 GB RAM
  • BIOS-Hardwarevirtualisierung, manchmal als Virtualization Technology oder VTx bezeichnet. Diese muss aktiviert sein und im Leistungs-Tab des Task-Managers wie unten gezeigt als Aktiviert angezeigt werden.
Enabled BIOS virtualization shown in Windows Task Manager

Docker Desktop herunterladen und installieren

Als Erstes müssen Sie Docker Desktop herunterladen und installieren, um Docker unter Windows zu verwenden. Docker Desktop ist in zwei Versionen erhältlich: eine stabile Version und eine Testversion.

Die stabile Version wird vierteljährlich veröffentlicht und stellt eine vollständig getestete Anwendung sicher. In diesem Artikel verwenden Sie die stabile Version.

Warnung: Bei der Installation fordert Docker Desktop Sie möglicherweise auf, den Hyper-V-Hypervisor zu installieren, sofern dieser nicht bereits installiert ist. Durch die Installation des Hyper-V-Hypervisors werden Benutzermodus-Hypervisoren wie VirtualBox, VMWare usw. daran gehindert, Gast-VMs auszuführen. Die Unterstützung von Hyper-V für VirtualBox und VMWare ist begrenzt, aber in Arbeit.

Sie haben auch die Möglichkeit, Docker Desktop manuell von Docker.com herunterzuladen oder über den Windows-Paketmanager Chocolatey. Lassen Sie uns kurz auf jede Methode eingehen.

Von Docker.com aus

Um Docker Desktop direkt von docker.com herunterzuladen, können Sie zur Produktseite gehen, ein Konto registrieren und es von dort herunterladen. Dies ist empfehlenswert, wenn Sie Docker in der Produktion verwenden möchten, indem Sie ein Konto registrieren.

Wenn Sie Docker jedoch nur zum ersten Mal testen möchten, können Sie es auch direkt herunterladen, was viel einfacher ist.

Nachdem die EXE-Datei heruntergeladen wurde, führen Sie die ausführbare Datei aus und klicken Sie durch die Hinweise, indem Sie alle Standardeinstellungen akzeptieren.

Wenn Sie gefragt werden, ob Sie Windows-Container anstelle von Linux-Containern verwenden möchten, wie unten gezeigt, aktivieren Sie nicht das Kontrollkästchen. In diesem Artikel werden Sie Linux-Container verwenden.

Installing Docker Desktop

Nach Abschluss der Installation starten Sie Ihren Computer neu.

Die Auswahl der Option, Windows-Container oder Linux-Container zu verwenden, gibt Docker an, Bilder an einen Windows-Kernel oder Linux-Kernel anzuhängen. Sie können diese Einstellung jederzeit nach der Installation ändern, indem Sie mit der rechten Maustaste auf das Docker-Symbol im System Tray klicken und „Zu Windows-Containern wechseln“ auswählen, wie unten gezeigt.

Switching to Windows containers

Verwendung von Chocolatey

Die andere Option, Docker Desktop herunterzuladen und zu installieren, ist mit Chocolatey. Chocolatey automatisiert viele der Download-/Installationsaufgaben für Sie. Öffnen Sie dazu eine Befehlszeilenkonsole (entweder cmd oder PowerShell) als Administrator, um das Programm mit dem folgenden Befehl herunterzuladen und zu installieren.

choco install docker-desktop

Nach Abschluss starten Sie Windows 10 neu.

Wenn Sie zu einem späteren Zeitpunkt die Testversion ausprobieren möchten, können Sie dies durch Ausführen von choco install docker-desktop --pre herunterladen und installieren.

Validierung der Docker Desktop Installation

Nach der Installation wird Docker Desktop automatisch als Dienst ausgeführt und bietet Docker unter Windows an. Es wird in der Systemleiste angezeigt, wenn Sie sich nach dem Neustart bei Windows anmelden. Aber wie wissen Sie eigentlich, ob es funktioniert?

Um zu überprüfen, ob Docker Desktop korrekt funktioniert, öffnen Sie eine Befehlszeilenkonsole und führen Sie den Befehl docker aus. Wenn die Installation erfolgreich war, sehen Sie eine Docker-Befehlsreferenz.

Schließlich lassen Sie Docker ein Beispiel-Container-Image mit dem Namen hello-world herunterladen und ausführen, indem Sie den Befehl docker run hello-world ausführen. Wenn alles in Ordnung ist, sehen Sie eine Ausgabe wie unten angegeben.

A successful test image run via Docker Desktop

Ausführen von Befehlen in Docker-Containern

Ist Docker Desktop installiert und haben Sie überprüft, dass alles in Ordnung ist? Was nun? Um mit Docker unter Windows zu beginnen, ist eine häufige Aufgabe das Ausführen von Befehlen in einem Docker-Container. Über den Befehl docker run können Sie Befehle direkt vom Host (Ihrem Windows 10 PC) in einen laufenden Container senden.

Um Befehle in einem Container mit docker run auszuführen, geben Sie zuerst den Namen eines Images an, gefolgt vom Befehl. Um loszulegen, geben Sie Docker den Befehl, hostname in einem Container namens alpine auszuführen, wie unten gezeigt.

> docker run alpine hostname
b74ff46601af

Da Sie das alpine Docker-Image derzeit nicht auf Ihrem Computer haben, wird Docker auf Windows das kleine Image von Docker Hub herunterladen, einen Container aus diesem Image starten und den Befehl direkt in den Container senden und ihn dann sofort wieder herunterfahren.

Wenn Sie den Container weiterhin laufen lassen möchten, können Sie auch den Parameter -it verwenden. Dieser Parameter sagt Docker, den Container im „Interaktiven Modus“ zu halten und ihn im Vordergrund laufen zu lassen, nachdem der Befehl ausgeführt wurde. Sie werden sehen, dass Ihnen dann eine Terminal-Eingabeaufforderung angezeigt wird, bereit zur Verwendung.

> docker run -it alpine sh
/ #

Wenn Sie mit dem Terminal fertig sind, geben Sie exit ein, um zu Windows 10 zurückzukehren.

Auf Dateien vom Docker-Host in Containern zugreifen

Eine weitere übliche Aufgabe ist der Zugriff auf Host-Dateien von Containern aus. Um auf Host-Dateien in Containern zuzugreifen, ermöglicht Docker unter Windows das Verknüpfen eines Ordnerpfads von Ihrem Desktop aus, um diesen Ordner für Ihren Container freizugeben. Dieser Vorgang wird als Binding bezeichnet.

Um ein Binding zu erstellen, erstellen Sie einen Ordner auf einem lokalen Laufwerk. Für dieses Beispiel werde ich E:\ verwenden und ihn input nennen. Es wird dann ein neues Textdokument mit dem Namen file.txt im Ordner erstellt. Verwenden Sie gerne einen beliebigen Pfad und eine beliebige Datei.

Sobald Sie den Ordner haben, den Sie zwischen dem Host und dem Container teilen möchten, muss Docker den Ordner mit dem Parameter --mount einbinden. Der Parameter --mount erfordert drei Argumente: einen Mount-Typ, einen Quell-Host-Verzeichnispfad und einen Zielverzeichnispfad. Der Ziel-Pfad wird ein symbolischer Link im Container sein.

Unten sehen Sie ein Beispiel für das Einbinden des gesamten E:\ auf dem Windows 10-Host, der als Verzeichnis /home/TEST im Linux-Container angezeigt wird.

> docker run --mount type=bind,source="E:/",target=/home/TEST -it alpine

Wenn Sie den Ordner auf dem Host einbinden möchten, fragt Docker Desktop nach Ihrer Erlaubnis, dieses Laufwerk mit den Docker-Containern zu teilen, wie unten dargestellt.

Sharing a Docker drive

Wenn Sie wie zuvor beschrieben die Datei file.txt im Ordner unter Windows 10 erstellt haben, führen Sie cat /home/TEST/input/file.txt aus. Sie werden sehen, dass der Inhalt angezeigt wird.

Löschen Sie nun den gerade erstellten Ordner input und führen Sie den Befehl cat ... erneut aus. Beachten Sie, dass die Shell nun meldet, dass die Datei nicht mehr vorhanden ist.

Working with files in Docker containers

Mapping von Netzwerkports

Ein weiteres wichtiges Konzept, das Sie kennen sollten, ist, wie Docker unter Windows das Networking handhabt. Für eine kurze Einführung schauen wir uns an, was erforderlich ist, um auf einen in einem Container ausgeführten Webdienst vom lokalen Host aus zuzugreifen.

Beginnen Sie damit, ein Demo-Image zu starten, das eine Beispielwebseite ausführt. Laden Sie das Docker-Image namens dockersamples/static-site herunter und führen Sie es aus. Sie verwenden dazu den Befehl docker container run.

Der folgende Befehl führt vier Aktionen gleichzeitig aus:

  • Lädt ein Docker-Image namens static-site von Docker Hub im „Verzeichnis“ docker-samples herunter
  • Startet eine Containerinstanz aus dem Bild static-site
  • Trennt den Container unmittelbar vom Terminal-Vordergrund (--detach)
  • Macht die Netzwerkports des laufenden Containers für den Windows 10-Host zugänglich (--publish-all)
docker container run --detach --publish-all dockersamples/static-site
## Alternative/kurze Syntax, die dasselbe bewirkt:
## docker container run -d -P dockersamples/static-site
## docker run -d -P dockersamples/static-site

Nach dem Ausführen gibt Docker die Container-ID zurück, wie unten gezeigt.

Docker container ID returned from running a container

Veröffentlichen von Netzwerkports

Seit Verwendung des Parameters --publish-all werden die lokalen Host-Ports jetzt auf den Netzwerkstapel des Containers abgebildet. Mit dem Unterbefehl docker ps können Sie alle laufenden Container auflisten, einschließlich der für alle laufenden Container zugewiesenen Ports. Im folgenden Beispiel wird ein Container ausgeführt, der den Host-Port 32777 dem Container-Port 80 und den Host-Port 32776 dem Container-Port 443 zuordnet.

Showing port mapping of Docker container

Docker unter Windows weist Containern zufällige Ports zu, wenn der Parameter --publish-all verwendet wird, es sei denn, sie werden explizit definiert.

Öffnen Sie jetzt einen Webbrowser und navigieren Sie zu http://localhost:32777 oder dem Port, den Docker zum Zuordnen des Ports 80 ausgegeben hat, wie von docker ps angezeigt. Wenn alles gut geht, sollten Sie die unten stehende Webseite sehen.

Resulting webpage running in the Docker container

Ändern der veröffentlichten Ports

Sie haben jetzt einen Docker-Container, der in Docker unter Windows eine einfache Webseite bereitstellt. Herzlichen Glückwunsch! Aber jetzt müssen Sie eine bestimmte Portbindung angeben, ohne sich auf die zufällige Portauswahl mit --publish-all zu verlassen. Kein Problem. Verwenden Sie den Parameter -p.

Zunächst stoppen Sie den laufenden Container, indem Sie eine eindeutige Zeichenfolge seiner Container-ID angeben. Diese Container-ID finden Sie, indem Sie docker ps ausführen. Sobald Sie die Container-ID kennen, stoppen Sie den Container und starten einen neuen, während Sie Docker anweisen, einen bestimmten Port zur Veröffentlichung zuzuweisen.

Die Syntax zur Angabe eines Ports lautet <externer Port>:<Container-Port>. Verwenden Sie für jeden Port, den Sie veröffentlichen möchten, den --publish– oder -p-Schalter mit den externen und Container-Portnummern wie unten gezeigt.

> docker stop f766
> docker run --detach -p 1337:80 dockersamples/static-site

Wenn Sie eine Container-ID angeben, müssen Sie nur genügend Zeichen der ID eingeben, um sie eindeutig zu identifizieren. Wenn Sie nur einen einzigen Container ausführen und seine ID f766f4ac8d66bf7 ist, können Sie den Container mit beliebig vielen Zeichen, einschließlich nur f, identifizieren. Die Anforderung ist, dass das, was Sie eingeben, es ermöglicht, einen einzelnen Container eindeutig zu identifizieren.

Öffnen Sie jetzt Ihren Webbrowser und navigieren Sie zu localhost:1337. Denken Sie daran, dass Sie das Bild nicht ändern und es immer auf Port 80 lauscht. Sie ändern lediglich die Port-Übersetzungsregel in der Docker-Konfiguration, die es Ihnen ermöglicht, eine Verbindung zum Container herzustellen.

Webpage being served up on port 1337

Stoppen aller Container

Mit docker stop können Sie einen Container stoppen, aber wie stoppen Sie mehrere Container gleichzeitig? Eine Möglichkeit dies zu tun, ist die Angabe mehrerer, durch Leerzeichen getrennter Container-IDs. Im folgenden Beispiel sehen Sie, wie Sie drei Container mit den IDs fd50b0a446e7, 36ee57c3b7da und 7c45664906ff stoppen können.

> docker stop fd50 36ee 7c45

Wenn Sie Docker-Container in PowerShell verwalten, können Sie auch eine Abkürzung verwenden, um alle Container zu stoppen. Geben Sie eine Liste von Container-IDs über docker ps -q an den Stopp-Parameter durch die Befehlserweiterung von PowerShell weiter docker stop (docker ps -q).

Bestätigen Sie, dass alle Container gestoppt sind, indem Sie keine aufgelisteten Container sehen, wenn Sie docker ps eingeben.

Aufräumen

Sie haben einige Container-Images heruntergeladen und einige Container ausgeführt, die jetzt gestoppt sind. Auch wenn sie gestoppt sind, ist ihr zugewiesener Speicherplatz auf der lokalen Host-Festplatte nicht verschwunden. Sie müssen die Container löschen, um diesen Speicherplatz freizugeben und Ihren Arbeitsbereich nicht zu überladen.

Verwenden Sie zum Löschen eines einzelnen Containers den Container-Entfernungsparameter rm wie unten gezeigt.

> docker container rm <container ID>

Oder verwenden Sie den Parameter prune, um alle gestoppten Container zu löschen.

> docker container prune

Source:
https://adamtheautomator.com/docker-windows/