Bist du neu bei Docker Windows Images? Arbeitest du derzeit in einem Windows-Shop und möchtest mehr über Docker-Builds für Container-Images erfahren? Du bist hier genau richtig. Der beste Weg, etwas Neues zu lernen, ist durch praktische Anwendung mit den `docker build` und `docker build „tag“` Befehlen!
In diesem Artikel lernst du, wie du dein erstes Windows Docker-Image aus einer Dockerfile mit dem `docker build` Befehl erstellst.
Lass uns loslegen!
Verständnis von Docker-Container-Images
Jahrelang war der einzige Weg, um Tests durchzuführen oder Entwicklung auf mehreren Betriebssystemen (OS) durchzuführen, die Verwendung mehrerer dedizierter physischer oder virtueller Maschinen, die mit der OS-Version Ihrer Wahl gebootet wurden. Diese Methodik erforderte mehr Hardware und Aufwand, um neue Maschinen für jede Software- und OS-Spezifikation bereitzustellen.
Heutzutage ist jedoch die Verwendung von Docker Container-Images teilweise auf die Popularität der Microservice-Architektur zurückzuführen. Als Reaktion auf den Anstieg der Popularität von Docker unterstützt Microsoft öffentlich Docker-Images für mehrere Flaggschiffprodukte auf ihrer Docker Hub-Seite. Sie haben sogar die native Unterstützung für Bilder für Windows als Produktmerkmal in Windows 10 und Windows Server 2016 hinzugefügt!
A Docker image is run on a container by using the Docker Engine. Docker images have many benefits such as portability (applicable to multiple environments and platforms), customizable, and highly scalable. As you can see below, unlike traditional virtual machines, the Docker engine runs on a layer between the host OS kernel and the isolated application services that are being containerized.

Verständnis von Docker Build und Images
Der docker build
-Befehl kann genutzt werden, um die automatische Erstellung von Container-Images zu ermöglichen, eine Container-als-Code-DevOps-Praxis zu übernehmen und die Containerisierung in den Entwicklungszyklus Ihrer Projekte zu integrieren. Dockerfiles sind einfach Textdateien, die Build-Anweisungen enthalten, die von Docker verwendet werden, um ein neues Container-Image zu erstellen, das auf einem vorhandenen Image basiert.
Der Benutzer kann das Basisimage und die Liste der Befehle angeben, die ausgeführt werden sollen, wenn ein Container-Image bereitgestellt oder beim ersten Start ausgeführt wird. In diesem Artikel erfahren Sie, wie Sie ein Windows-basiertes Docker-Image aus einer Dockerdatei mithilfe eines Windows-Containers erstellen.
Dieser Prozess bietet mehrere Vorteile gegenüber der Verwendung eines vorgefertigten Container-Images:
- Sie können ein Container-Image für mehrere Versionen von Windows neu erstellen, was für das Testen von Codeänderungen auf verschiedenen Plattformen großartig ist.
- Sie haben mehr Kontrolle darüber, was im Container installiert ist. Dies ermöglicht es Ihnen, die Größe Ihres Containers auf ein Minimum zu reduzieren.
- Aus Sicherheitsgründen möchten Sie möglicherweise den Container auf Sicherheitslücken überprüfen und die Sicherheit des Basisimages erhöhen.
Voraussetzungen/Anforderungen
Dieser Artikel ist eine Anleitung zum Erlernen des Aufbaus eines Docker-Images mithilfe einer Dockerdatei. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen.
- Docker für Windows installiert. Ich werde die Docker Community Edition (CE) Version 2.1.0.4 in meiner Umgebung verwenden.
- Internetzugang ist erforderlich, um die Docker-Images herunterzuladen
- Windows 10+ Betriebssystem (Version 1709 wird für dieses Tutorial verwendet)
- Aktivierte verschachtelte Virtualisierung
- 5 GB freier Speicherplatz auf Ihrem lokalen Rechner
- PowerShell 5.0+
- In diesem Tutorial wird die Visual Studio Code IDE verwendet. Sie können jedoch gerne die von Ihnen bevorzugte IDE verwenden.
Hinweis: Stellen Sie sicher, dass bei der Installation von Docker die Konfiguration für Windows-Container aktiviert ist.
Vorbereitung
Sie benötigen zunächst einen Ordner, um alle Docker-Images und Container zu speichern, die Sie aus diesen Images erstellen werden. Öffnen Sie dazu ein PowerShell- oder Cmd-Terminal (im Verlauf dieses Artikels wird ausschließlich PowerShell verwendet) und erstellen Sie ein neues Verzeichnis namens C:\Containers.
Nachdem der Ordner erstellt wurde, wechseln Sie zu diesem Verzeichnis. Dadurch wird das aktuelle Arbeitsverzeichnis der Konsole auf C:\Containers gesetzt, um alle Downloads standardmäßig in dieses Verzeichnis zu speichern.
In diesem Artikel erhalten Sie einen Vorsprung. Die meisten Dateien für dieses Projekt sind bereits verfügbar. Sobald der Ordner erstellt ist, führen Sie einen Git pull aus, um die für diesen Artikel benötigten Dateien aus dem TechSnips Github-Repository in den Ordner C:\Containers zu kopieren. Überprüfen Sie anschließend, ob der Ordner C:\Containers wie unten aussieht.

Herunterladen des IIS Windows Docker-Images
Die erste Aufgabe besteht darin, ein „Template“ oder Basismodell herunterzuladen. Sie werden später Ihr eigenes Docker-Image erstellen, aber zuerst benötigen Sie ein Bild, um zu beginnen. Sie werden die neuesten IIS- und Windows Server Core-Bilder herunterladen, die für dieses Tutorial erforderlich sind. Die aktualisierte Liste der Bilder finden Sie auf der offiziellen Microsoft Docker-Hub-Bildseite.
Überprüfen der aktuellen Docker-Basisbilder
Bevor Sie das Bild aus dem Bild-Repository herunterladen, überprüfen wir zunächst die aktuellen Docker-Basisbilder, die sich derzeit auf Ihrem lokalen System befinden. Führen Sie dazu eine PowerShell-Konsole als Administrator aus und geben Sie dann docker images
ein. Dieser Befehl gibt alle Bilder auf Ihrem lokalen System zurück.
Wie unten zu sehen ist, sind die verfügbaren Bilder zunächst leer.

Herunterladen des Basisbildes
Jetzt ist es an der Zeit, das Basis-IIS-Image von Docker Hub herunterzuladen. Führen Sie dazu den Befehl docker pull
wie unten gezeigt aus. Dieser Vorgang kann je nach Internetgeschwindigkeit einige Zeit in Anspruch nehmen.

Führen Sie nun docker images
aus, und Sie sollten das neueste Microsoft Windows Core IIS-Image für dieses Tutorial verfügbar haben.

Überprüfung des Dockerfile
In einem früheren Schritt haben Sie ein vorhandenes Dockerfile für dieses Tutorial heruntergeladen. Schauen wir uns nun genau an, was das bedeutet.
Öffnen Sie die Datei C:\Containers\Container1\Dockerfile in Ihrem bevorzugten Editor. Der Inhalt dieses Dockerfiles wird verwendet, um zu definieren, wie das Container-Image zur Build-Zeit konfiguriert wird.
Sie können eine Erklärung sehen, was jeder Abschnitt dieser Datei in den Inline-Kommentaren bewirkt.
Erstellen eines neuen Docker-Images
Sie haben bereits die Dockerfile bereit und ein Basis-IIS-Image heruntergeladen. Jetzt ist es an der Zeit, Ihr neues Docker-Image mit Hilfe der Dockerfile zu erstellen.
Um ein neues Image zu erstellen, verwenden Sie den Befehl docker build "tag"
. Dieser Befehl erstellt das Image. In diesem Artikel verwenden Sie auch die Option -t **
, die den „tag“-Teil ersetzt. Diese Option ermöglicht es Ihnen, Ihrem neuen Image einen freundlichen Tag-Namen zu geben und auch auf die Dockerfile zu verweisen, indem Sie den Ordnerpfad angeben, in dem sie sich befindet.
Im Folgenden sehen Sie ein Beispiel dafür, wie Sie sicherstellen können, dass die Konsole im Verzeichnis C:\Containers ist und dann ein neues Image aus der Dockerfile im Verzeichnis C:\Containers\Container1 erstellen.
Sobald gestartet, können Sie den Fortschritt des Befehls sehen, während er jede Anweisung in der Dockerfile Zeile für Zeile durchläuft:

Wenn alles erledigt ist, sollten Sie jetzt ein neues Docker-Image haben!
Führen Sie nun den Befehl docker images
aus, um die verfügbaren Images anzuzeigen. Im folgenden Beispiel sehen Sie das erstellte Image container1.

Hinweis: Der Befehl
docker build —help
ist ein nützlicher Parameter, um detaillierte Informationen über den ausgeführten Docker-Befehl anzuzeigen.
Ausführen des Docker-Containers
Zu diesem Zeitpunkt sollten Sie ein neues Image erstellt haben. Es ist an der Zeit, einen Container mit diesem Image zu starten. Verwenden Sie dazu den Befehl docker run
.
Der Befehl docker run
startet einen neuen Docker-Container basierend auf dem zuvor erstellten container1-Image. Ein Beispiel dafür sehen Sie unten.
Beachten Sie, dass der Parameter -d
verwendet wird. Dies teilt dem Docker-Laufzeitmodul mit, das Bild im abgetrennten Modus zu starten und dann zu beenden, wenn der Root-Prozess, der zum Ausführen des Containers verwendet wird, beendet ist.
Wenn docker run
abgeschlossen ist, gibt es die ID des erstellten Containers zurück. Im folgenden Beispiel wird diese ID in eine $containerID
-Variable eingefangen, damit wir später einfach darauf verweisen können.

Sobald der Container gestartet ist, führen Sie den Befehl docker ps
aus. Dieser Befehl ermöglicht es Ihnen, die Container anzuzeigen, die derzeit unter Verwendung jedes Bilds ausgeführt werden. Beachten Sie unten, dass dem laufenden Bild automatisch ein Spitzname (busy_habit in diesem Fall) zugewiesen wird. Dieser Spitzname wird manchmal anstelle der Container-ID verwendet, um den Container zu verwalten.

Ausführen von Code innerhalb eines Docker-Containers
A new container is built from a new image you just created. Let’s now start actually using that container to run code. Running code inside of a Docker container is done using the docker exec
command.
In diesem Beispiel führen Sie docker exec
aus, um die PowerShell-Ausgabe für den Befehl Get-ChildItem
im Container mithilfe der folgenden Befehlssyntax anzuzeigen. Dadurch wird sichergestellt, dass die Anweisungen in der Docker-Datei zum Entfernen der Standard-IIS-Dateien erfolgreich waren.
Sie können unten sehen, dass die einzige vorhandene Datei index.html ist, was bedeutet, dass die Standarddateien entfernt wurden.

Führen Sie nun den Befehl ipconfig
im Container aus, um die lokale IP-Adresse des Containerbilds zu erhalten, damit Sie versuchen können, eine Verbindung zur IIS-Website herzustellen.
Sie können unten sehen, dass ipconfig
im Container ausgeführt wurde, als ob es auf Ihrem lokalen Computer ausgeführt würde, und alle IP-Informationen zurückgegeben hat.

ipconfig
in a Docker containerInspektion der IIS-Website
Jetzt ist es an der Zeit, die Früchte Ihrer Arbeit zu enthüllen! Es ist Zeit zu sehen, ob der IIS-Server, der im Docker-Container läuft, die index.html-Seite ordnungsgemäß bereitstellt.
Öffnen Sie einen Browser und fügen Sie die über ipconfig
gefundene IPv4-Adresse in die Adressleiste ein. Wenn alles gut läuft, sollten Sie eine Hello World!! Nachricht wie unten sehen.

Überprüfung des Docker-Verlaufs
Ein nützlicher Befehl, der beim Arbeiten mit Docker-Containern verwendet wird, ist der docker history
Befehl. Obwohl er nicht unbedingt mit der Erstellung eines Abbilds oder eines Containers selbst zusammenhängt, ist der docker history
Befehl ein nützlicher Befehl, der es Ihnen ermöglicht, Änderungen am Container-Abbild zu überprüfen.
Sie können unten sehen, dass docker history
alle Dockerfile- und PowerShell-Aktivitäten zurückgibt, die im container1 Container durchgeführt wurden, mit dem Sie gearbeitet haben.

docker history
Bereinigen der ausgeführten Docker-Abbilder
Die folgenden Schritte werden verwendet, um alle gestoppten Container auf Ihrem Computer zu bereinigen. Dadurch werden Speicherplatz und Systemressourcen freigegeben.
Führen Sie den Befehl docker ps
aus, um eine Liste der auf Ihrem System ausgeführten Container anzuzeigen:

Stoppen Sie nun die ausgeführten Container mit dem Befehl docker stop
:

Schließlich können Sie die gestoppten Container dauerhaft mit dem Befehl docker system prune
entfernen.
