Anpassen eines Docker-Images zum Ausführen Ihrer eigenen Web-App

Abgeschlossen

Docker Hub ist eine ausgezeichnete Quelle für Images, mit der Sie anfangen können, Ihre eigenen containerisierten Apps zu erstellen. Sie können ein Image herunterladen, das die grundlegende Funktionalität bietet, die Sie benötigen, und dieses mit Ihrer eigenen Anwendung überlagern, um ein neues benutzerdefiniertes Image zu erstellen. Sie können die Schritte für diesen Prozess automatisieren, indem Sie eine Dockerfile-Datei schreiben.

Im Szenario mit dem Online-Bekleidungshandel hat das Unternehmen entschieden, in Zukunft Docker zu verwenden. Der nächste Schritt besteht darin, die beste Methode zur Containerisierung Ihrer Webanwendungen zu finden. Das Unternehmen plant, viele Apps mithilfe von ASP.NET Core zu erstellen. Sie haben festgestellt, dass Docker Hub ein Basisimage enthält, das dieses Framework umfasst. Als Proof of Concept sollten Sie mit diesem Basisimage beginnen und den Code für eine der Web-Apps hinzufügen, um ein neues benutzerdefiniertes Image zu erstellen. Sie möchten auch, dass dieser Prozess leicht zu wiederholen ist, sodass er beim Veröffentlichen einer neuen Version der Web-App automatisiert werden kann.

In dieser Einheit erfahren Sie, wie Sie ein benutzerdefiniertes Docker-Image erstellen und wie Sie den Prozess automatisieren können, indem Sie eine Dockerfile schreiben.

Erstellen eines benutzerdefinierten Images mit einer Dockerfile-Datei

Um ein Docker-Image zu erstellen, das Ihre Anwendung enthält, identifizieren Sie in der Regel zunächst ein Basisimage, dem Sie Dateien und Konfigurationsinformationen hinzufügen. Der Prozess zum Ermitteln eines geeigneten Basisimages beginnt in der Regel mit einer Imagesuche auf Docker Hub. Sie suchen ein Image, das bereits ein Anwendungsframework sowie alle Hilfsprogramme und Tools einer Linux-Distribution umfasst, wie Ubuntu oder Alpine. Wenn Sie beispielsweise eine ASP.NET Core-Anwendung haben, die Sie in einem Container packen möchten: Microsoft veröffentlicht ein Image namens mcr.microsoft.com/dotnet/core/aspnet, das bereits die ASP.NET Core Runtime enthält.

Sie können ein Image anpassen, indem ein Container mit dem Basisimage gestartet und dann Änderungen daran vorgenommen werden. Änderungen beinhalten in der Regel Aktivitäten wie das Kopieren von Dateien aus dem lokalen Dateisystem in den Container und das Ausführen verschiedener Tools und Hilfsprogramme zum Kompilieren von Code. Verwenden Sie den Befehl docker commit, wenn Sie fertig sind, um die Änderungen in einem neuen Image zu speichern.

Die manuelle Durchführung des oben genannten Vorgangs ist zeitraubend und fehleranfällig. Sie könnten ihn mit einer Skriptsprache wie Bash schreiben, aber Docker bietet eine effektivere Möglichkeit, die Imageerstellung über eine Dockerfile zu automatisieren.

Eine Dockerfile ist eine Nur-Text-Datei, die alle zum Erstellen eines Images benötigten Befehle enthält. Dockerfile-Dateien werden in einer minimalen Skriptsprache geschrieben, die für das Erstellen und Konfigurieren von Images konzipiert ist. Sie dokumentieren die Vorgänge, die zum Erstellen eines Images ausgehend von einem Basisimage erforderlich sind.

Das folgende Beispiel zeigt eine Dockerfile-Datei, die eine .NET Core 2.2-Anwendung erstellt und in ein neues Image packt.

FROM mcr.microsoft.com/dotnet/core/sdk:2.2
WORKDIR /app
COPY myapp_code .
RUN dotnet build -c Release -o /rel
EXPOSE 80
WORKDIR /rel
ENTRYPOINT ["dotnet", "myapp.dll"]

In dieser Datei finden die folgenden Vorgänge statt:

Get-Help Aktion
FROM Lädt das angegebene Image herunter und erstellt basierend auf diesem Image einen neuen Container
WORKDIR Legt das aktuelle Arbeitsverzeichnis im Container fest, das von den nachfolgenden Befehlen verwendet wird
COPY Kopiert Dateien vom Hostcomputer in den Container. Das erste Argument (myapp_code) ist eine Datei oder ein Ordner auf dem Hostcomputer. Das zweite Argument (.) gibt den Namen der Datei oder des Ordners an, die bzw. der als Ziel im Container fungiert. In diesem Fall ist das Ziel das aktuelle Arbeitsverzeichnis (/app).
AUSFÜHREN Führt einen Befehl im Container aus. Argumente für den RUN-Befehl sind Befehlszeilenbefehle.
EXPOSE Erstellt eine Konfiguration im neuen Image, die angibt, welche Ports beim Ausführen des Containers geöffnet werden sollen. Wenn der Container eine Web-App ausführt, ist es üblich, Port 80 über EXPOSE bereitzustellen.
ENTRYPOINT Gibt den Vorgang an, den der Container ausführen soll, wenn er gestartet wird. In diesem Beispiel wird die neu erstellte App ausgeführt. Sie geben den auszuführenden Befehl und jedes seiner Argumente als Zeichenfolgenarray an.

Gemäß der Konvention weisen Anwendungen, die als Docker-Images gepackt werden sollen, typischerweise eine Dockerfile-Datei im Stammverzeichnis ihres Quellcodes auf, die fast immer Dockerfile heißt.

Der docker build-Befehl erstellt ein neues Image durch Ausführen einer Dockerfile-Datei. Die Syntax dieses Befehls verfügt über mehrere Parameter:

  • Das Flag -f gibt den Namen der zu verwendenden Dockerfile-Datei an.
  • Das Flag -t gibt den Namen des zu erstellenden Images an, in diesem Beispiel myapp:v1.
  • Der letzte Parameter (.) stellt den Buildkontext für die Quelldateien für den COPY-Befehl bereit: den Satz von Dateien auf dem Hostcomputer, der während des Buildprozesses benötigt wird.
docker build -t myapp:v1 .

Im Hintergrund erstellt der Befehl docker build einen Container, führt in diesem Befehle aus und committet die Änderungen dann an ein neues Image.