Elemente eines Dockerfile
Eine Dockerfile ist ein Skript mit einer Reihe von Anweisungen zum Erstellen eines Docker-Images. Dockerfiles enthalten in der Regel die folgenden Informationen:
- Das Basisimage oder das übergeordnete Image, das zur Erstellung eines neuen Images verwendet wird
- Befehle zur Aktualisierung des Basisbetriebssystems und Installation anderer Software
- Einzubeziehende Buildartefakte wie beispielsweise entwickelte Anwendungen
- Ausführbare Dienste wie beispielsweise ein Speicher und eine Netzwerkkonfiguration
- Ausführbare Befehle, wenn der Container gestartet wird
Erstellen eines Dockerfile
Der erste Schritt beim Erstellen einer Dockerfile ist das Wählen eines Basisimages, das als Grundlage für Ihre Anwendung dient. Wenn Sie beispielsweise eine .NET-Anwendung erstellen, können Sie ein Microsoft .NET-Image als Basis auswählen.
# Use the .NET 6 runtime as a base image
FROM mcr.microsoft.com/dotnet/runtime:6.0
# Set the working directory to /app
WORKDIR /app
# Copy the contents of the published app to the container's /app directory
COPY bin/Release/net6.0/publish/ .
# Expose port 80 to the outside world
EXPOSE 80
# Set the command to run when the container starts
CMD ["dotnet", "MyApp.dll"]
Lassen Sie uns die einzelnen Zeilen durchgehen, um zu sehen, was sie bewirken:
FROM mcr.microsoft.com/dotnet/runtime:6.0
: Dieser Befehl legt das Basisimage auf die .NET 6-Runtime fest, die zum Ausführen von .NET 6-Apps erforderlich ist.WORKDIR /app
: legt das Arbeitsverzeichnis, in das App-Dateien kopiert werden, auf/app
fest.COPY bin/Release/net6.0/publish/ .
: kopiert den Inhalt der veröffentlichten App in das Verzeichnis/app
des Containers. Wir gehen davon aus, dass die .NET 6-App erstellt und im Verzeichnisbin/Release/net6.0/publish
veröffentlicht wurde.EXPOSE 80
: macht Port 80, den standardmäßigen HTTP-Port, für die Außenwelt verfügbar. Ändern Sie diese Zeile entsprechend, wenn Ihre App an einem anderen Port lauscht.CMD ["dotnet", "MyApp.dll"]
: der Befehl, der beim Start des Containers ausgeführt werden soll. In diesem Fall führen wir den Befehl „dotnet“ mit dem Namen der DLL-Datei unserer App (MyApp.dll
) aus. Ändern Sie diese Zeile so, dass sie Name und Einstiegspunkt Ihrer Apps entspricht.
Die Dockerfile-Dateispezifikation wird nicht behandelt. Weitere Informationen finden Sie in der Dockerfile-Referenz. Jeder dieser Schritte erstellt ein zwischengespeichertes Containerimage, während das endgültige Containerimage erstellt wird. Diese temporären Images werden über das vorherige geschichtet und nach Abschluss aller Schritte als einzelnes Image dargestellt.
Ressourcen
- Docker-Ausführungsreferenz (CLI)
- Docker-Buildreferenz