Sind Sie neu bei Docker Windows Images? Arbeiten Sie derzeit in einem Windows-Shop und sind neugierig, mehr über Docker-Builds für Container-Images zu erfahren? Sie sind an der richtigen Stelle. Der beste Weg, etwas Neues zu lernen, ist der docker build
und docker build "tag"
Befehle!
In diesem Artikel erfahren Sie, wie Sie Ihr erstes Windows-Docker-Image aus einer Docker-Datei mit dem docker build
erstellen Befehl.
Fangen wir an!
Docker-Container-Images verstehen
Jahrelang bestand die einzige Möglichkeit zum Testen oder Entwickeln auf mehreren Betriebssystemen (OS) darin, mehrere dedizierte physische oder virtuelle Maschinen mit der Betriebssystemversion Ihrer Wahl abbilden zu lassen. Diese Methodik erforderte mehr Hardware und Overhead, um neue Maschinen für jede Software- und Betriebssystemspezifikation bereitzustellen.
Heutzutage hat die Verwendung von Docker-Container-Images jedoch teilweise aufgrund der Popularität der Microservice-Architektur zugenommen. Als Reaktion auf die zunehmende Popularität von Docker hat Microsoft damit begonnen, Docker-Images für mehrere Flaggschiff-Produkte auf ihrer Docker-Hub-Seite öffentlich zu unterstützen. Sie haben sogar native Unterstützung für Images für Windows als Produktfeature in Windows 10 und Windows Server 2016 hinzugefügt!
Ein Docker-Image wird mithilfe der Docker-Engine auf einem Container ausgeführt. Docker-Images haben viele Vorteile wie Portabilität (anwendbar auf mehrere Umgebungen und Plattformen), Anpassbarkeit und hohe Skalierbarkeit. Wie Sie unten sehen können, läuft die Docker-Engine im Gegensatz zu herkömmlichen virtuellen Maschinen auf einer Ebene zwischen dem Kernel des Host-Betriebssystems und den isolierten Anwendungsdiensten, die containerisiert werden.
Docker-Build und -Images verstehen
Der docker build
Der Befehl kann genutzt werden, um die Container-Image-Erstellung zu automatisieren, eine Container-als-Code-DevOps-Praxis einzuführen 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 Basis-Image und die Liste der Befehle angeben, die ausgeführt werden sollen, wenn ein Container-Image zum ersten Mal bereitgestellt oder gestartet wird. In diesem Artikel erfahren Sie, wie Sie mithilfe eines Windows-Containers ein Windows-basiertes Docker-Image aus Dockerfile erstellen.
Dieser Prozess hat mehrere Vorteile gegenüber der Verwendung eines vorgefertigten Container-Images:
- Sie können ein Container-Image für mehrere Windows-Versionen neu erstellen – was sich hervorragend zum Testen von Codeänderungen auf mehreren Plattformen eignet.
- Sie haben mehr Kontrolle darüber, was im Container installiert wird. Dadurch können Sie Ihre Behältergröße auf ein Minimum reduzieren.
- Aus Sicherheitsgründen sollten Sie den Container auf Schwachstellen überprüfen und das Basis-Image mit Sicherheitshärtungen versehen
Voraussetzungen/Anforderungen
Dieser Artikel ist eine exemplarische Vorgehensweise zum Erlernen des Erstellens eines Docker-Images mithilfe einer Dockerfile. 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.
- Zum Herunterladen der Docker-Images ist ein Internetzugang erforderlich
- Betriebssystem Windows 10+ (Version 1709 wird für dieses Tutorial verwendet)
- Verschachtelte Virtualisierung aktiviert
- 5 GB freier Speicherplatz auf Ihrem lokalen Computer
- PowerShell 5.0+
- Dieses Tutorial verwendet die Visual Studio Code-IDE. Fühlen Sie sich jedoch frei, die IDE zu verwenden, die Sie bevorzugen.
Hinweis:Stellen Sie sicher, dass Sie die Windows-Containerkonfiguration aktivieren, wenn Sie Docker installieren.
Vorbereitung
Sie benötigen zunächst einen Ordner zum Speichern aller Docker-Images und -Container, die Sie aus diesen Images erstellen. Öffnen Sie dazu ein Powershell- oder cmd-Terminal (in diesem Artikel verwenden Sie PowerShell) und erstellen Sie ein neues Verzeichnis mit dem Namen C:\Containers.
Sobald der Ordner erstellt ist, wechseln Sie in dieses Verzeichnis. Dadurch wird das aktuelle Arbeitsverzeichnis der Konsole auf C:\Containers gesetzt standardmäßig alle Downloads in dieses Verzeichnis.
PS51> mkdir C:\Containers
PS51> cd C:\Containers
In diesem Artikel erhalten Sie einen Vorsprung. Die meisten Dateien zum Durcharbeiten dieses Projekts sind bereits verfügbar. Sobald der Ordner erstellt ist, führen Sie einen Git-Pull durch, um die für diesen Artikel benötigten Dateien aus dem TechSnips-Github-Repository in C:\Containers zu kopieren Mappe. Überprüfen Sie nach Abschluss, ob die Datei C:\Containers Ordner sieht wie unten aus.
Herunterladen des IIS-Windows-Docker-Images
Die erste auszuführende Aufgabe besteht darin, eine „Vorlage“ oder ein Basisbild herunterzuladen. Sie werden später Ihr eigenes Docker-Image erstellen, aber zuerst benötigen Sie ein Image, mit dem Sie beginnen können. Sie laden die neuesten IIS- und Windows Server Core-Images herunter, die für dieses Tutorial erforderlich sind. Die aktualisierte Liste der Images finden Sie auf der offiziellen Microsoft Docker-Hub-Image-Seite.
Überprüfung der aktuellen Docker-Basis-Images
Bevor Sie das Image aus dem Image-Repository herunterladen, überprüfen wir zunächst die aktuellen Docker-Basisimages, die Sie derzeit auf Ihrem lokalen System haben. 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 Sie unten sehen können, sind die verfügbaren Bilder anfänglich leer.
PS51> docker images
Herunterladen des Basisimages
Jetzt ist es an der Zeit, das Basis-IIS-Image von Docker Hub herunterzuladen. Führen Sie dazu docker pull
aus Wie nachfolgend dargestellt. Dieser Vorgang kann abhängig von Ihrer Internetgeschwindigkeit einige Zeit in Anspruch nehmen.
PS51> docker pull mcr.microsoft.com/windows/servercore/iis
Führen Sie nun docker images
aus und Sie sollten das neueste Microsoft Windows Core IIS-Image für dieses Tutorial zur Verfügung haben.
PS51> docker images
Inspizieren der Dockerfile
In einem früheren Schritt hatten Sie eine vorhandene Docker-Datei für dieses Tutorial heruntergeladen. Schauen wir uns nun genau an, was das bedeutet.
Öffnen Sie C:\Containers\Container1\Dockerfile Datei in Ihrem bevorzugten Editor. Der Inhalt dieser Docker-Datei wird verwendet, um zu definieren, wie das Container-Image zur Build-Zeit konfiguriert wird.
In den Inline-Kommentaren können Sie eine Erklärung dazu sehen, was jeder Teil dieser Datei tut.
# Specifies that the latest microsoft/iis image will be used as the base image
# Used to specify which base container image will be used by the build process.
# Notice that the naming convention is "**owner/application name : tag name**"
# (shown as microsoft/iis:latest); so in our case the owner of the image is
# Microsoft and the application is IIS with the "latest" tag name being used
# to specify that you will pull the most recent image version available.
FROM microsoft/iis:latest
# Copies contents of the wwwroot folder to the inetpub/wwwroot folder in the new container image
# Used to specify that you want to copy the WWWroot folder to the IIS inetpub WWWroot
# folder in the container. You don't have to specify the full path to your local
# files because docker already has the logic built-in to reference files and folders
# relative to the docker file location on your system. Also, make note that that
# docker will only recognize forward slashes for file paths - since this is a
# Windows based container instead of Linux.
COPY wwwroot c:/inetpub/wwwroot
# Run some PowerShell commands within the new container to set up the image
# Run the PowerShell commands to remove the default IIS files and create a new
# application pool called TestPool
RUN powershell Remove-Item c:/inetpub/wwwroot/iisstart.htm -force
RUN powershell Remove-Item c:/inetpub/wwwroot/iisstart.png -force
RUN powershell Import-Module WebAdministration
RUN powershell New-WebAppPool -Name 'TestPool'
# Exposes port 80 on the new container image
# Used to open TCP port 80 for allowing an http connection to the website.
# However, this line is commented out, because the IIS container has this port
# already open by default.
#EXPOSE 80
# Sets the main command of the container image
# This tells the image to run a service monitor for the w3svc service.
# When this is specified the container will automatically stop running
# if the w3svc service stopped. This line is commented out because of the
# IIS container already has this entrypoint in place by default.
#ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]
Erstellen eines neuen Docker-Image
Sie haben das Dockerfile einsatzbereit und ein Basis-IIS-Image heruntergeladen. Jetzt ist es an der Zeit, Ihr neues Docker-Image mithilfe der Dockerfile.
zu erstellen
Um ein neues Image zu erstellen, verwenden Sie das docker build "tag"
Befehl. Dieser Befehl erstellt das Bild. Für diesen Artikel können Sie unten sehen, dass Sie auch das -t **
verwenden Option, die den „Tag“-Teil ersetzt. Mit dieser Option können Sie Ihrem neuen Image einen benutzerfreundlichen Tag-Namen geben und auch auf die Docker-Datei verweisen, indem Sie den Ordnerpfad angeben, in dem sie sich befindet.
Unten sehen Sie ein Beispiel dafür, wie Sie sicherstellen, dass sich die Konsole im Verzeichnis C:\Containers befindet, und dann ein neues Image aus der Dockerfile in C:\Containers\Container1 erstellen Verzeichnis.
PS51> cd C:\Containers
PS51> docker build -t container1 .\Container1
Nach dem Start können Sie den Fortschritt des Befehls sehen, während er jede Anweisung in der Docker-Datei Zeile für Zeile durchläuft:
Sobald Sie fertig sind, sollten Sie jetzt ein neues Docker-Image haben!
Führen Sie nun die docker images
aus Befehl, um die verfügbaren Bilder anzuzeigen. Unten sehen Sie ein Beispiel für container1 Bild erstellt.
Hinweis:Der
docker build —help
command ist ein nützlicher Parameter, um detaillierte Informationen zum ausgeführten Docker-Befehl anzuzeigen.
Ausführen des Docker-Containers
An diesem Punkt sollten Sie ein neues Image erstellt haben. Es ist an der Zeit, einen Container mit diesem Image hochzufahren. Um einen neuen Container aufzurufen, verwenden Sie docker run
Befehl.
Der docker run
-Befehl wird einen neuen Docker-Container basierend auf container1 aufrufen Bild, das Sie zuvor erstellt haben. Unten sehen Sie ein Beispiel dafür.
Beachten Sie, dass das -d
Parameter verwendet wird. Dies weist die Docker-Laufzeit an, das Image im getrennten Modus zu starten und dann zu beenden, wenn der Root-Prozess, der zum Ausführen des Containers verwendet wurde, beendet wird.
Beim docker run
abgeschlossen ist, gibt es die ID des erstellten Containers zurück. Das folgende Beispiel erfasst diese ID in einer $containerID
Variable, damit wir später leicht darauf verweisen können.
PS51> $containerID = docker run -d container1
PS51> $containerID
Sobald der Container hochgefahren ist, führen Sie nun docker ps
aus Befehl. Mit diesem Befehl können Sie sehen, welche Container derzeit mit jedem Image ausgeführt werden. Beachten Sie unten, dass für das laufende Bild automatisch ein Spitzname generiert wird (busy_habit in diesem Fall). Dieser Kurzname wird manchmal anstelle der Container-ID verwendet, um den Container zu verwalten.
Ausführen von Code in einem Docker-Container
Ein neuer Container wird aus einem neuen Image erstellt, das Sie gerade erstellt haben. Beginnen wir nun damit, diesen Container tatsächlich zum Ausführen von Code zu verwenden. Das Ausführen von Code innerhalb eines Docker-Containers erfolgt mithilfe von docker exec
Befehl.
Führen Sie in diesem Beispiel docker exec
aus um die PowerShell-Ausgabe für Get-ChildItem
anzuzeigen Befehl im Container mithilfe der folgenden Befehlssyntax. Dadurch wird sichergestellt, dass die Anweisungen in der Docker-Datei zum Entfernen der Standard-IIS-Dateien erfolgreich waren.
PS51> docker exec $containerID powershell Get-ChildItem c:\inetpub\wwwroot
Sie können unten sehen, dass die einzige existierende Datei index.html ist was bedeutet, dass die Standarddateien entfernt wurden.
Führen Sie nun die ipconfig
aus Befehl im Container, um die lokale IP-Adresse des Container-Images abzurufen, damit Sie versuchen können, eine Verbindung zur IIS-Website herzustellen.
PS51> docker exec $containerID ipconfig
Darunter sehen Sie ipconfig
wurde im Container ausgeführt, als würde er auf Ihrem lokalen Computer ausgeführt, und hat alle IP-Informationen zurückgegeben.
Inspizieren der IIS-Website
Jetzt ist es an der Zeit, die Früchte Ihrer Arbeit zu enthüllen! Es ist an der Zeit zu prüfen, ob der IIS-Server, der im Docker-Container ausgeführt wird, die index.html-Seite ordnungsgemäß bereitstellt.
Öffnen Sie einen Browser und fügen Sie die über ipconfig
gefundene IP4-Adresse ein in die Adressleiste. Wenn alles in Ordnung ist, sollten Sie ein Hello World!! sehen Nachricht wie unten.
Überprüfen des Docker-Verlaufs
Ein nützlicher Befehl für die Arbeit mit Docker-Containern ist der docker history
Befehl. Obwohl es nicht unbedingt mit dem Erstellen eines Images oder Containers selbst zusammenhängt, ist der docker history
Der Befehl ist ein nützlicher Befehl, mit dem Sie Änderungen überprüfen können, die am Container-Image vorgenommen wurden.
PS51> docker history container1
Sie können unten den docker history
sehen gibt alle Dockerfile- und PowerShell-Aktivitäten zurück, die auf container1 ausgeführt wurden Container, mit dem Sie gearbeitet haben.
Aufräumen der laufenden Docker-Images
Die folgenden Schritte werden verwendet, um alle angehaltenen Container zu bereinigen, die auf Ihrem Computer ausgeführt werden. Dadurch werden Speicherplatz und Systemressourcen freigegeben.
Führen Sie docker ps
aus Befehl, um eine Liste der Container anzuzeigen, die auf Ihrem System ausgeführt werden:
PS51> docker ps
Stoppen Sie nun die laufenden Container mit docker stop
Befehl:
PS51> docker stop <image nick name: busy_haibt in my case>
PS51> docker stop <image nick name: unruffled_driscoll in my case>
Schließlich können Sie die angehaltenen Container mit docker system prune
dauerhaft entfernen Befehl.
PS51> docker system prune
Weiterführende Literatur
- Erstellen Ihres ersten Docker-Windows-Server-Containers
- So verwalten Sie Docker-Volumes unter Windows