ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

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

  1. Erstellen Sie einen Ordner für das Projekt.

  2. Öffnen Sie die Entwickler-Eingabeaufforderung im Projektordner und initialisieren Sie das Projekt

    dotnet new webapi --no-https
    

Docker-Dateien zum Projekt hinzufügen

  1. Öffnen Sie den Projektordner in VS Code.

  2. 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.

  3. Öffnen Sie die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) und verwenden Sie den Befehl Container: Docker-Dateien zum Arbeitsbereich hinzufügen...

    Add Dockerfile to a .NET project

  4. Verwenden Sie .NET: ASP.NET Core, wenn Sie nach der Anwendungsplattform gefragt werden.

  5. 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.

  6. 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.

  7. Ändern Sie den Port für den Anwendungs-Endpunkt auf 5000.

  8. 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

  1. Öffnen Sie die Terminal-Eingabeaufforderung (⌃` (Windows, Linux Ctrl+`)).

  2. Geben Sie den Befehl dotnet build ein, um die Anwendung zu erstellen

    PS 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

  1. Öffnen Sie die Datei Dockerfile.

  2. Verwenden Sie die Anweisung ENV, um eine Umgebungsvariable zum Dienst-Container-Image hinzuzufügen. Die Anweisung sollte sich in der base-Phase des Dockerfile (der ersten Phase in der Datei) befinden. Setzen Sie die Variable ASPNETCORE_URLS auf http://*:5000

    Add an environment variable to Docker image

    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 des Dockerfile, um eine Debug-Version des Container-Images für Ihren Dienst zu erstellen. Platzieren Sie die Definition der Umgebungsvariablen ASPNETCORE_URLS in der base-Phase, damit diese Variable sowohl in der Debug- als auch in der Release-Version des Container-Images verfügbar ist.

  3. Speichern Sie die Datei Dockerfile.

Image erstellen

  1. Öffnen Sie die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) und geben Sie den Befehl Container-Images: Image erstellen... ein.

  2. Öffnen Sie den Container Explorer und vergewissern Sie sich, dass das neue Image im Images-Baum sichtbar ist

    Verify Docker image exists

Dienst-Container testen

  1. 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

    Running service container

  2. Ö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 Element PortBindings, zum Beispiel

    "PortBindings": {
      "5000/tcp": [
        {
          "HostIp": "",
          "HostPort": "5000"
        }
      ]
    },
    
  3. 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.

  1. Setzen Sie einen Haltepunkt am Anfang des Codes für die Get()-Methode der Datei Controllers/WeatherForecastController.cs.

  2. Öffnen Sie die Datei .vscode/launch.json und finden Sie die Debug-Konfiguration Containers: .NET Core Launch.

  3. Fügen Sie dockerServerReadyAction zur Konfiguration Containers: .NET Core Launch hinzu

    "dockerServerReadyAction": {
        "uriFormat": "%s://:%s/WeatherForecast"
    }
    
  4. Stellen Sie sicher, dass die Konfiguration als aktiv ausgewählt ist

    Selected Docker debug configuration

  5. 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 WeatherForecastController wird 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

© . This site is unofficial and not affiliated with Microsoft.