ASP.NET Core in einem Container
In dieser Anleitung lernen Sie, wie Sie
- Eine
Dockerfile-Datei erstellen, die einen einfachen .NET Core-Dienst-Container beschreibt. - Die Funktionalität des Dienstes erstellen, ausführen und überprüfen.
- Den Dienst, der als Container läuft, debuggen.
Voraussetzungen
- Docker und die VS Code Container Tools-Erweiterung müssen wie in der Übersicht beschrieben installiert sein.
- Installieren Sie für die .NET-Entwicklung das .NET SDK.
- Microsoft C# for Visual Studio Code-Erweiterung.
Erstellen eines .NET Web API-Projekts
-
Erstellen Sie einen Ordner für das Projekt.
-
Öffnen Sie die Entwickler-Eingabeaufforderung im Projektordner und initialisieren Sie das Projekt
dotnet new webapi --no-https
Docker-Dateien zum Projekt hinzufügen
-
Öffnen Sie den Projektordner in VS Code.
-
Warten Sie, bis die C#-Erweiterung Sie auffordert, erforderliche Ressourcen für Build und Debugging hinzuzufügen, und wählen Sie Ja. Sie können auch die Befehlspalette öffnen (⇧⌘P (Windows, Linux Ctrl+Shift+P)) und den Befehl .NET: Assets für Build und Debug erstellen verwenden.
-
Öffnen Sie die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) und verwenden Sie den Befehl Container: Docker-Dateien zum Arbeitsbereich hinzufügen...

-
Verwenden Sie .NET: ASP.NET Core, wenn Sie nach der Anwendungsplattform gefragt werden.
-
Wählen Sie Windows oder Linux, wenn Sie nach dem Betriebssystem gefragt werden.
Windows ist nur anwendbar, wenn Ihre Docker-Installation für die Verwendung von Windows-Containern konfiguriert ist.
-
Sie werden gefragt, ob Sie Docker Compose-Dateien hinzufügen möchten. Wir werden Docker Compose in diesem Tutorial nicht verwenden, daher sind beide Antworten "Ja" und "Nein" in Ordnung.
-
Ändern Sie den Port für den Anwendungs-Endpunkt auf
5000. -
Dockerfile- und.dockerignore-Dateien werden dem Arbeitsbereich hinzugefügt.Die Erweiterung erstellt außerdem eine Reihe von VS Code-Aufgaben zum Erstellen und Ausführen des Containers (sowohl in Debug- als auch in Release-Konfiguration, insgesamt vier Aufgaben) und eine Debugging-Konfiguration zum Starten des Containers im Debug-Modus.
Anwendung erstellen
-
Öffnen Sie die Terminal-Eingabeaufforderung (⌃` (Windows, Linux Ctrl+`)).
-
Geben Sie den Befehl
dotnet buildein, um die Anwendung zu erstellenPS C:\source\repos\net> dotnet build MSBuild version 17.4.0-preview-22470-08+6521b1591 for .NET Determining projects to restore... All projects are up-to-date for restore. net -> C:\source\repos\net\bin\Debug\net7.0\net.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:08.96
Umgebungsvariable zum Image hinzufügen
Sie können die Container Tools-Erweiterung zum Erstellen von Docker-Dateien verwenden. Die Erweiterung bietet Vervollständigungen und kontextbezogene Hilfe. Um diese Funktionen zu sehen, fügen Sie Ihrem Dienst-Image eine Umgebungsvariable hinzu, indem Sie die folgenden Schritte ausführen
-
Öffnen Sie die Datei
Dockerfile. -
Verwenden Sie die Anweisung
ENV, um eine Umgebungsvariable zum Dienst-Container-Image hinzuzufügen. Die Anweisung sollte sich in derbase-Phase desDockerfile(der ersten Phase in der Datei) befinden. Setzen Sie die VariableASPNETCORE_URLSaufhttp://*:5000
Beachten Sie, wie die Container Tools-Erweiterung alle verfügbaren Dockerfile-Anweisungen auflistet und die Syntax beschreibt.
Die Container Tools-Erweiterung verwendet die
base-Phase desDockerfile, um eine Debug-Version des Container-Images für Ihren Dienst zu erstellen. Platzieren Sie die Definition der UmgebungsvariablenASPNETCORE_URLSin derbase-Phase, damit diese Variable sowohl in der Debug- als auch in der Release-Version des Container-Images verfügbar ist. -
Speichern Sie die Datei
Dockerfile.
Image erstellen
-
Öffnen Sie die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) und geben Sie den Befehl Container-Images: Image erstellen... ein.
-
Öffnen Sie den Container Explorer und vergewissern Sie sich, dass das neue Image im Images-Baum sichtbar ist

Dienst-Container testen
-
Klicken Sie mit der rechten Maustaste auf das im vorherigen Schritt erstellte Image und wählen Sie Ausführen oder Interaktiv ausführen. Der Container sollte starten und Sie sollten ihn in der "Container"-Ansicht des Container Explorers sehen können

-
Öffnen Sie den Webbrowser und navigieren Sie zu https://:5000/WeatherForecast. Sie sollten Wetterdaten im JSON-Format sehen, ähnlich wie folgt
[ {"date":"2019-11-07T23:31:57.0527092+00:00","temperatureC":4,"temperatureF":39,"summary":"Bracing"}, {"date":"2019-11-08T23:31:57.0539243+00:00","temperatureC":-19,"temperatureF":-2,"summary":"Freezing"}, {"date":"2019-11-09T23:31:57.0539269+00:00","temperatureC":2,"temperatureF":35,"summary":"Freezing"}, {"date":"2019-11-10T23:31:57.0539275+00:00","temperatureC":-4,"temperatureF":25,"summary":"Freezing"}, {"date":"2019-11-11T23:31:57.053928+00:00","temperatureC":9,"temperatureF":48,"summary":"Bracing"} ]Standardmäßig weist Docker einen zufällig ausgewählten Host-Port einem von einem Container bereitgestellten Port (dem Container-Port) zu. In unserer Anwendung ist der bereitgestellte Port (Container-Port) 5000. Wenn Sie den Befehl Ausführen für ein Image ausführen, versucht VS Code, dieselbe Portnummer für den Host-Port und den Container-Port zu verwenden. Dies erleichtert das Merken des zu verwendenden Ports zur Kommunikation mit dem Container, funktioniert aber nicht, wenn der Host-Port bereits belegt ist.
Wenn Sie die Daten aus dem Container in Ihrem Browser nicht sehen können, stellen Sie sicher, dass keine Fehler vom
docker run-Befehl gemeldet werden (suchen Sie in der Befehlsausgabe im Terminalfenster). Sie können auch überprüfen, welcher Host-Port vom Container verwendet wird, indem Sie mit der rechten Maustaste auf den Container im Container Explorer klicken und Inspizieren wählen. Dies öffnet ein JSON-Dokument, das den Container im Detail beschreibt. Suchen Sie nach dem ElementPortBindings, zum Beispiel"PortBindings": { "5000/tcp": [ { "HostIp": "", "HostPort": "5000" } ] }, -
Wenn Sie mit dem Testen fertig sind, klicken Sie mit der rechten Maustaste auf den Container im Container Explorer und wählen Sie Stoppen.
Debuggen im Container
Als die Docker-Dateien zur Anwendung hinzugefügt wurden, hat die Container Tools-Erweiterung auch eine VS Code-Debugger-Konfiguration zum Debuggen des Dienstes hinzugefügt, wenn dieser in einem Container läuft. Die Erweiterung erkennt automatisch das Protokoll und den Port, den der Dienst verwendet, und leitet den Browser zum Dienst weiter. Wir müssen ihr jedoch mitteilen, welchen URL-Pfad sie verwenden soll.
-
Setzen Sie einen Haltepunkt am Anfang des Codes für die
Get()-Methode der DateiControllers/WeatherForecastController.cs. -
Öffnen Sie die Datei
.vscode/launch.jsonund finden Sie die Debug-KonfigurationContainers: .NET Core Launch. -
Fügen Sie
dockerServerReadyActionzur KonfigurationContainers: .NET Core Launchhinzu"dockerServerReadyAction": { "uriFormat": "%s://:%s/WeatherForecast" } -
Stellen Sie sicher, dass die Konfiguration als aktiv ausgewählt ist

-
Starten Sie das Debugging (F5).
- Die Debug-Version des Dienst-Containers wird erstellt und gestartet.
- Der Browser öffnet sich, um eine neue Wettervorhersage anzufordern.
- Der Haltepunkt im
WeatherForecastControllerwird erreicht.
Sie können einen bestimmten Port auf dem Host verwenden, indem Sie die von der Aufgabe docker-run: debug verwendeten Docker-Ausführungsoptionen ändern (definiert in der Datei .vscode/tasks.json). Wenn Sie beispielsweise denselben Port (5000) zum Bereitstellen des Dienstes verwenden möchten, würde die Aufgaben-Definition docker-run: debug wie folgt aussehen
{
"type": "docker-run",
"label": "docker-run: debug",
"dependsOn": [
"docker-build: debug"
],
"dockerRun": {
"ports": [
{ "hostPort": 5000, "containerPort": 5000 }
]
},
"netCore": {
"appProject": "${workspaceFolder}/netcorerest.csproj",
"enableDebugging": true
}
Nächste Schritte
Sie sind fertig! Da Ihr Container nun bereit ist, möchten Sie vielleicht
- Erfahren Sie mehr über das Debuggen von .NET in einem Container
- Passen Sie Ihre Docker-Build- und Ausführungsaufgaben an
- Pushen Sie Ihr Image in eine Container-Registry
- Stellen Sie eine containerisierte App in Azure App Service oder Azure Container Apps bereit
- Erfahren Sie mehr über die Verwendung von Docker Compose