Ausführen einer ASP.NET Core-App in Docker-Containern
Hinweis
Dies ist nicht die neueste Version dieses Artikels. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Warnung
Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der Supportrichtlinie für .NET und .NET Core. Informationen zum aktuellen Release finden Sie in der .NET 8-Version dieses Artikels.
Wichtig
Diese Informationen beziehen sich auf ein Vorabversionsprodukt, das vor der kommerziellen Freigabe möglicherweise noch wesentlichen Änderungen unterliegt. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.
Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
In diesem Artikel wird gezeigt, wie eine ASP.NET Core-App in Docker-Containern ausgeführt wird.
Windows Home Edition unterstützt Hyper-V nicht, und Hyper-V ist für Docker erforderlich.
Informationen zum Containerisieren einer .NET-App mit dotnet publish
finden Sie unter Containerisieren einer .NET-App mit dotnet publish.
ASP.NET Core Docker-Images
Für dieses Tutorial laden Sie eine ASP.NET Core-Beispiel-App herunter, und führen sie in Docker-Containern aus. Das Beispiel funktioniert sowohl mit Linux- als auch mit Windows-Containern.
Die Dockerfile-Beispieldatei verwendet das Docker-Feature für mehrstufige Builds zur Erstellung und Ausführung in verschiedenen Containern. Die Erstellungs- und Ausführungscontainer werden aus Images erstellt, die im Docker-Hub von Microsoft bereitgestellt werden:
dotnet/sdk
Das Beispiel verwendet dieses Image für die Erstellung der App. Das Image enthält das .NET SDK, das die Befehlszeilentools (CLI) enthält. Das Image ist für die lokale Entwicklung sowie für das Debuggen und für Komponententests optimiert. Aufgrund der installierten Tools für die Entwicklung und Kompilierung ist das Image relativ groß.
dotnet/aspnet
Das Beispiel verwendet dieses Image zum Ausführen der App. Das Image enthält die ASP.NET Core-Runtime und -Bibliotheken und wurde für das Ausführen von Apps in der Produktion optimiert. Das Image wurde im Hinblick auf Bereitstellungs- und App-Startgeschwindigkeit entwickelt und ist daher relativ klein, sodass die Netzwerkleistung von Docker-Registrierung zu Docker-Host optimiert ist. Nur die zum Ausführen einer App benötigten Binärdateien und Inhalte werden in den Container kopiert. Die Inhalte sind bereit zur Ausführung und ermöglichen in kürzester Zeit nach dem
docker run
das Starten der App. Die dynamische Codekompilierung ist im Docker-Modell nicht erforderlich.
Voraussetzungen
Docker-Client 18.03 oder höher
Herunterladen der Beispiel-App
Laden Sie das Beispiel herunter, indem Sie das .NET Docker-Repository klonen:
git clone https://github.com/dotnet/dotnet-docker
Lokales Ausführen der App
Navigieren Sie zum Projektordner unter dotnet-docker/samples/aspnetapp/aspnetapp.
Führen Sie den folgenden Befehl aus, um die App zu erstellen und lokal auszuführen:
dotnet run
Navigieren Sie in einem Browser zu
http://localhost:<port>
, um die App zu testen.Drücken Sie Strg+C an der Eingabeaufforderung, um die App zu stoppen.
Ausführen in einem Linux- oder Windows-Container
Wenn Sie in einem Linux-Container ausführen möchten, klicken Sie mit der rechten Maustaste auf das Docker-Clientsymbol in der Systemleiste, und wählen Sie den Wechsel zu Linux-Containern.
Wenn Sie in einem Windows-Container ausführen möchten, klicken Sie mit der rechten Maustaste auf das Docker-Clientsymbol in der Systemleiste, und wählen Sie den Wechsel zu Windows-Containern.
Navigieren Sie zum Dockerfile-Ordner unter dotnet-docker/samples/aspnetapp.
Führen Sie die folgenden Befehle zum Erstellen und Ausführen des Beispiels in Docker aus:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
Argumente des
build
-Befehls:- Nennen Sie das Image „aspnetapp“.
- Suchen Sie nach der Dockerfil-Datei im aktuellen Ordner (Punkt am Ende).
Argumente des run-Befehls:
- Ordnen Sie ein pseudo-TTY zu, und halten Sie es offen, wenn auch nicht angefügt. (Dieselben Auswirkungen wie
--interactive --tty
.) - Entfernen Sie den Container, wenn er beendet wird.
- Ordnen Sie
<port>
auf dem lokalen Computer Port 8080 im Container zu. - Nennen Sie den Container „aspnetcore_sample“.
- Geben Sie das aspnetapp-Image an.
Navigieren Sie in einem Browser zu
http://localhost:<port>
, um die App zu testen.
Manuelles Erstellen und Bereitstellen
In einigen Szenarios müssen Sie möglicherweise eine App in einem Container bereitstellen, indem Sie die erforderlichen Ressourcen zur Laufzeit kopieren. In diesem Abschnitt wird gezeigt, wie Sie die Bereitstellung manuell ausführen.
Navigieren Sie zum Projektordner unter dotnet-docker/samples/aspnetapp/aspnetapp.
Führen Sie den Befehl dotnet publish aus:
dotnet publish -c Release -o published
Argumente des Befehls:
- erstellen die App im Releasemodus (der Debugmodus ist der Standardmodus).
- erstellen die Ressourcen im Ordner published (Veröffentlicht).
Führen Sie die App aus.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Navigieren Sie zu
http://localhost:<port>
, um die Startseite anzuzeigen.
Erstellen Sie eine neue Dockerfile-Datei, und verwenden Sie den Befehl docker build .
zum Erstellen eines Images, um die manuell veröffentlichte App in einem Docker-Container zu verwenden.
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Verwenden Sie den Befehl docker images
, um das neue Image anzuzeigen.
Die Dockerfile-Datei
Dies ist die Dockerfile-Datei, die vom zuvor ausgeführten Befehl docker build
verwendet wurde. Dabei wird dotnet publish
auf die gleiche Weise wie in diesem Abschnitt zum Erstellen und Bereitstellen verwendet.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
In der vorherigen Dockerfile werden die *.csproj
-Dateien kopiert und in unterschiedlichen Ebenen wiederhergestellt. Wenn der Befehl docker build
ein Image erstellt, wird ein integrierter Cache verwendet. Wenn sich die *.csproj
-Dateien seit der letzten Ausführung des Befehls docker build
nicht geändert haben, muss der dotnet restore
-Befehl nicht noch mal ausgeführt werden. Stattdessen wird der integrierte Cache für die entsprechende dotnet restore
-Ebene verwendet. Weitere Informationen finden Sie unter Best Practices für Dockerfiles.
Zusätzliche Ressourcen
- Containerisieren einer .NET-App mit dem Befehl „dotnet publish“
- docker build-Befehl
- docker run-Befehl
- Beispiel für ASP.NET Core-Docker (das in diesem Tutorial verwendete Beispiel)
- Konfigurieren von ASP.NET Core zur Verwendung mit Proxyservern und Lastenausgleich
- Arbeiten mit Visual Studio-Tools für Docker
- Debuggen mit Visual Studio Code
- GC mittels Docker und kleiner Containers
- System.IO.IOException: Der konfigurierte Benutzergrenzwert (128) für die Anzahl der inotify-Instanzen wurde erreicht.
- Updates für Docker-Images
Nächste Schritte
Im Git-Repository, das die Beispiel-App enthält, finden Sie auch die Dokumentation. Eine Übersicht über die im Repository verfügbaren Ressourcen finden Sie in der Infodatei. Insbesondere erfahren Sie, wie Sie HTTPS implementieren:
ASP.NET Core Docker-Images
Für dieses Tutorial laden Sie eine ASP.NET Core-Beispiel-App herunter, und führen sie in Docker-Containern aus. Das Beispiel funktioniert sowohl mit Linux- als auch mit Windows-Containern.
Die Dockerfile-Beispieldatei verwendet das Docker-Feature für mehrstufige Builds zur Erstellung und Ausführung in verschiedenen Containern. Die Erstellungs- und Ausführungscontainer werden aus Images erstellt, die im Docker-Hub von Microsoft bereitgestellt werden:
dotnet/sdk
Das Beispiel verwendet dieses Image für die Erstellung der App. Das Image enthält das .NET SDK, das die Befehlszeilentools (CLI) enthält. Das Image ist für die lokale Entwicklung sowie für das Debuggen und für Komponententests optimiert. Aufgrund der installierten Tools für die Entwicklung und Kompilierung ist das Image relativ groß.
dotnet/aspnet
Das Beispiel verwendet dieses Image zum Ausführen der App. Das Image enthält die ASP.NET Core-Runtime und -Bibliotheken und wurde für das Ausführen von Apps in der Produktion optimiert. Das Image wurde im Hinblick auf Bereitstellungs- und App-Startgeschwindigkeit entwickelt und ist daher relativ klein, sodass die Netzwerkleistung von Docker-Registrierung zu Docker-Host optimiert ist. Nur die zum Ausführen einer App benötigten Binärdateien und Inhalte werden in den Container kopiert. Die Inhalte sind bereit zur Ausführung und ermöglichen in kürzester Zeit nach dem
docker run
das Starten der App. Die dynamische Codekompilierung ist im Docker-Modell nicht erforderlich.
Voraussetzungen
Docker-Client 18.03 oder höher
Herunterladen der Beispiel-App
Laden Sie das Beispiel herunter, indem Sie das .NET Docker-Repository klonen:
git clone https://github.com/dotnet/dotnet-docker
Lokales Ausführen der App
Navigieren Sie zum Projektordner unter dotnet-docker/samples/aspnetapp/aspnetapp.
Führen Sie den folgenden Befehl aus, um die App zu erstellen und lokal auszuführen:
dotnet run
Navigieren Sie in einem Browser zu
http://localhost:5000
, um die App zu testen.Drücken Sie Strg+C an der Eingabeaufforderung, um die App zu stoppen.
Ausführen in einem Linux- oder Windows-Container
Wenn Sie in einem Linux-Container ausführen möchten, klicken Sie mit der rechten Maustaste auf das Docker-Clientsymbol in der Systemleiste, und wählen Sie den Wechsel zu Linux-Containern.
Wenn Sie in einem Windows-Container ausführen möchten, klicken Sie mit der rechten Maustaste auf das Docker-Clientsymbol in der Systemleiste, und wählen Sie den Wechsel zu Windows-Containern.
Navigieren Sie zum Dockerfile-Ordner unter dotnet-docker/samples/aspnetapp.
Führen Sie die folgenden Befehle zum Erstellen und Ausführen des Beispiels in Docker aus:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Argumente des
build
-Befehls:- Nennen Sie das Image „aspnetapp“.
- Suchen Sie nach der Dockerfil-Datei im aktuellen Ordner (Punkt am Ende).
Argumente des run-Befehls:
- Ordnen Sie ein pseudo-TTY zu, und halten Sie es offen, wenn auch nicht angefügt. (Dieselben Auswirkungen wie
--interactive --tty
.) - Entfernen Sie den Container, wenn er beendet wird.
- Ordnen Sie Port 5000 auf dem lokalen Computer Port 80 im Container zu.
- Nennen Sie den Container „aspnetcore_sample“.
- Geben Sie das aspnetapp-Image an.
Navigieren Sie in einem Browser zu
http://localhost:5000
, um die App zu testen.
Manuelles Erstellen und Bereitstellen
In einigen Szenarios müssen Sie möglicherweise eine App in einem Container bereitstellen, indem Sie die erforderlichen Ressourcen zur Laufzeit kopieren. In diesem Abschnitt wird gezeigt, wie Sie die Bereitstellung manuell ausführen.
Navigieren Sie zum Projektordner unter dotnet-docker/samples/aspnetapp/aspnetapp.
Führen Sie den Befehl dotnet publish aus:
dotnet publish -c Release -o published
Argumente des Befehls:
- erstellen die App im Releasemodus (der Debugmodus ist der Standardmodus).
- erstellen die Ressourcen im Ordner published (Veröffentlicht).
Führen Sie die App aus.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Navigieren Sie zu
http://localhost:5000
, um die Startseite anzuzeigen.
Erstellen Sie eine neue Dockerfile-Datei, und verwenden Sie den Befehl docker build .
zum Erstellen eines Images, um die manuell veröffentlichte App in einem Docker-Container zu verwenden.
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Verwenden Sie den Befehl docker images
, um das neue Image anzuzeigen.
Die Dockerfile-Datei
Dies ist die Dockerfile-Datei, die vom zuvor ausgeführten Befehl docker build
verwendet wurde. Dabei wird dotnet publish
auf die gleiche Weise wie in diesem Abschnitt zum Erstellen und Bereitstellen verwendet.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
In der vorherigen Dockerfile werden die *.csproj
-Dateien kopiert und in unterschiedlichen Ebenen wiederhergestellt. Wenn der Befehl docker build
ein Image erstellt, wird ein integrierter Cache verwendet. Wenn sich die *.csproj
-Dateien seit der letzten Ausführung des Befehls docker build
nicht geändert haben, muss der dotnet restore
-Befehl nicht noch mal ausgeführt werden. Stattdessen wird der integrierte Cache für die entsprechende dotnet restore
-Ebene verwendet. Weitere Informationen finden Sie unter Best Practices für Dockerfiles.
Zusätzliche Ressourcen
- Containerisieren einer .NET-App mit dem Befehl „dotnet publish“
- docker build-Befehl
- docker run-Befehl
- Beispiel für ASP.NET Core-Docker (das in diesem Tutorial verwendete Beispiel)
- Konfigurieren von ASP.NET Core zur Verwendung mit Proxyservern und Lastenausgleich
- Arbeiten mit Visual Studio-Tools für Docker
- Debuggen mit Visual Studio Code
- GC mittels Docker und kleiner Containers
- System.IO.IOException: Der konfigurierte Benutzergrenzwert (128) für die Anzahl der inotify-Instanzen wurde erreicht.
- Updates für Docker-Images
Nächste Schritte
Im Git-Repository, das die Beispiel-App enthält, finden Sie auch die Dokumentation. Eine Übersicht über die im Repository verfügbaren Ressourcen finden Sie in der Infodatei. Insbesondere erfahren Sie, wie Sie HTTPS implementieren:
ASP.NET Core Docker-Images
Für dieses Tutorial laden Sie eine ASP.NET Core-Beispiel-App herunter, und führen sie in Docker-Containern aus. Das Beispiel funktioniert sowohl mit Linux- als auch mit Windows-Containern.
Die Dockerfile-Beispieldatei verwendet das Docker-Feature für mehrstufige Builds zur Erstellung und Ausführung in verschiedenen Containern. Die Erstellungs- und Ausführungscontainer werden aus Images erstellt, die im Docker-Hub von Microsoft bereitgestellt werden:
dotnet/sdk
Das Beispiel verwendet dieses Image für die Erstellung der App. Das Image enthält das .NET SDK, das die Befehlszeilentools (CLI) enthält. Das Image ist für die lokale Entwicklung sowie für das Debuggen und für Komponententests optimiert. Aufgrund der installierten Tools für die Entwicklung und Kompilierung ist das Image relativ groß.
dotnet/core/sdk
Das Beispiel verwendet dieses Image für die Erstellung der App. Das Image enthält das .NET Core SDK mit den Befehlszeilentools (CLI). Das Image ist für die lokale Entwicklung sowie für das Debuggen und für Komponententests optimiert. Aufgrund der installierten Tools für die Entwicklung und Kompilierung ist das Image relativ groß.
dotnet/aspnet
Das Beispiel verwendet dieses Image zum Ausführen der App. Das Image enthält die ASP.NET Core-Runtime und -Bibliotheken und wurde für das Ausführen von Apps in der Produktion optimiert. Das Image wurde im Hinblick auf Bereitstellungs- und App-Startgeschwindigkeit entwickelt und ist daher relativ klein, sodass die Netzwerkleistung von Docker-Registrierung zu Docker-Host optimiert ist. Nur die zum Ausführen einer App benötigten Binärdateien und Inhalte werden in den Container kopiert. Die Inhalte sind bereit zur Ausführung und ermöglichen in kürzester Zeit nach dem
docker run
das Starten der App. Die dynamische Codekompilierung ist im Docker-Modell nicht erforderlich.
dotnet/core/aspnet
Das Beispiel verwendet dieses Image zum Ausführen der App. Das Image enthält die ASP.NET Core-Runtime und -Bibliotheken und wurde für das Ausführen von Apps in der Produktion optimiert. Das Image wurde im Hinblick auf Bereitstellungs- und App-Startgeschwindigkeit entwickelt und ist daher relativ klein, sodass die Netzwerkleistung von Docker-Registrierung zu Docker-Host optimiert ist. Nur die zum Ausführen einer App benötigten Binärdateien und Inhalte werden in den Container kopiert. Die Inhalte sind bereit zur Ausführung und ermöglichen in kürzester Zeit nach dem
docker run
das Starten der App. Die dynamische Codekompilierung ist im Docker-Modell nicht erforderlich.
Voraussetzungen
Herunterladen der Beispiel-App
Laden Sie das Beispiel herunter, indem Sie das .NET Docker-Repository klonen:
git clone https://github.com/dotnet/dotnet-docker
Lokales Ausführen der App
Navigieren Sie zum Projektordner unter dotnet-docker/samples/aspnetapp/aspnetapp.
Führen Sie den folgenden Befehl aus, um die App zu erstellen und lokal auszuführen:
dotnet run
Navigieren Sie in einem Browser zu
http://localhost:5000
, um die App zu testen.Drücken Sie Strg+C an der Eingabeaufforderung, um die App zu stoppen.
Ausführen in einem Linux- oder Windows-Container
Wenn Sie in einem Linux-Container ausführen möchten, klicken Sie mit der rechten Maustaste auf das Docker-Clientsymbol in der Systemleiste, und wählen Sie den Wechsel zu Linux-Containern.
Wenn Sie in einem Windows-Container ausführen möchten, klicken Sie mit der rechten Maustaste auf das Docker-Clientsymbol in der Systemleiste, und wählen Sie den Wechsel zu Windows-Containern.
Navigieren Sie zum Dockerfile-Ordner unter dotnet-docker/samples/aspnetapp.
Führen Sie die folgenden Befehle zum Erstellen und Ausführen des Beispiels in Docker aus:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Argumente des
build
-Befehls:- Nennen Sie das Image „aspnetapp“.
- Suchen Sie nach der Dockerfil-Datei im aktuellen Ordner (Punkt am Ende).
Argumente des run-Befehls:
- Ordnen Sie ein pseudo-TTY zu, und halten Sie es offen, wenn auch nicht angefügt. (Dieselben Auswirkungen wie
--interactive --tty
.) - Entfernen Sie den Container, wenn er beendet wird.
- Ordnen Sie Port 5000 auf dem lokalen Computer Port 80 im Container zu.
- Nennen Sie den Container „aspnetcore_sample“.
- Geben Sie das aspnetapp-Image an.
Navigieren Sie in einem Browser zu
http://localhost:5000
, um die App zu testen.
Manuelles Erstellen und Bereitstellen
In einigen Szenarios müssen Sie möglicherweise eine App in einem Container bereitstellen, indem Sie die erforderlichen Ressourcen zur Laufzeit kopieren. In diesem Abschnitt wird gezeigt, wie Sie die Bereitstellung manuell ausführen.
Navigieren Sie zum Projektordner unter dotnet-docker/samples/aspnetapp/aspnetapp.
Führen Sie den Befehl dotnet publish aus:
dotnet publish -c Release -o published
Argumente des Befehls:
- erstellen die App im Releasemodus (der Debugmodus ist der Standardmodus).
- erstellen die Ressourcen im Ordner published (Veröffentlicht).
Führen Sie die App aus.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Navigieren Sie zu
http://localhost:5000
, um die Startseite anzuzeigen.
Erstellen Sie eine neue Dockerfile-Datei, und verwenden Sie den Befehl docker build .
zum Erstellen eines Images, um die manuell veröffentlichte App in einem Docker-Container zu verwenden.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Verwenden Sie den Befehl docker images
, um das neue Image anzuzeigen.
Die Dockerfile-Datei
Dies ist die Dockerfile-Datei, die vom zuvor ausgeführten Befehl docker build
verwendet wurde. Dabei wird dotnet publish
auf die gleiche Weise wie in diesem Abschnitt zum Erstellen und Bereitstellen verwendet.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Verwenden Sie den Befehl docker images
, um das neue Image anzuzeigen.
Die Dockerfile-Datei
Dies ist die Dockerfile-Datei, die vom zuvor ausgeführten Befehl docker build
verwendet wurde. Dabei wird dotnet publish
auf die gleiche Weise wie in diesem Abschnitt zum Erstellen und Bereitstellen verwendet.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
In der vorherigen Dockerfile werden die *.csproj
-Dateien kopiert und in unterschiedlichen Ebenen wiederhergestellt. Wenn der Befehl docker build
ein Image erstellt, wird ein integrierter Cache verwendet. Wenn sich die *.csproj
-Dateien seit der letzten Ausführung des Befehls docker build
nicht geändert haben, muss der dotnet restore
-Befehl nicht noch mal ausgeführt werden. Stattdessen wird der integrierte Cache für die entsprechende dotnet restore
-Ebene verwendet. Weitere Informationen finden Sie unter Best Practices für Dockerfiles.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Die Dockerfile-Datei
Dies ist die Dockerfile-Datei, die vom zuvor ausgeführten Befehl docker build
verwendet wurde. Dabei wird dotnet publish
auf die gleiche Weise wie in diesem Abschnitt zum Erstellen und Bereitstellen verwendet.
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Wie bereits in der vorherigen Dockerfile-Datei erwähnt, werden *.csproj
-Dateien kopiert und als unterschiedliche Ebenen wiederhergestellt. Wenn der Befehl docker build
ein Image erstellt, wird ein integrierter Cache verwendet. Wenn sich die *.csproj
-Dateien seit der letzten Ausführung des Befehls docker build
nicht geändert haben, muss der dotnet restore
-Befehl nicht noch mal ausgeführt werden. Stattdessen wird der integrierte Cache für die entsprechende dotnet restore
-Ebene verwendet. Weitere Informationen finden Sie unter Best Practices für Dockerfiles.
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Die Dockerfile-Datei
Dies ist die Dockerfile-Datei, die vom zuvor ausgeführten Befehl docker build
verwendet wurde. Dabei wird dotnet publish
auf die gleiche Weise wie in diesem Abschnitt zum Erstellen und Bereitstellen verwendet.
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
In der vorherigen Dockerfile werden die *.csproj
-Dateien kopiert und in unterschiedlichen Ebenen wiederhergestellt. Wenn der Befehl docker build
ein Image erstellt, wird ein integrierter Cache verwendet. Wenn sich die *.csproj
-Dateien seit der letzten Ausführung des Befehls docker build
nicht geändert haben, muss der dotnet restore
-Befehl nicht noch mal ausgeführt werden. Stattdessen wird der integrierte Cache für die entsprechende dotnet restore
-Ebene verwendet. Weitere Informationen finden Sie unter Best Practices für Dockerfiles.
Zusätzliche Ressourcen
- Containerisieren einer .NET-App mit dem Befehl „dotnet publish“
- docker build-Befehl
- docker run-Befehl
- Beispiel für ASP.NET Core-Docker (das in diesem Tutorial verwendete Beispiel)
- Konfigurieren von ASP.NET Core zur Verwendung mit Proxyservern und Lastenausgleich
- Arbeiten mit Visual Studio-Tools für Docker
- Debuggen mit Visual Studio Code
- GC mittels Docker und kleiner Containers
- System.IO.IOException: Der konfigurierte Benutzergrenzwert (128) für die Anzahl der inotify-Instanzen wurde erreicht.
Nächste Schritte
Im Git-Repository, das die Beispiel-App enthält, finden Sie auch die Dokumentation. Eine Übersicht über die im Repository verfügbaren Ressourcen finden Sie in der Infodatei. Insbesondere erfahren Sie, wie Sie HTTPS implementieren: