Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
23m 51s
Das Deployment einer .NET Core-Anwendung in einen Docker-Container ist eine wichtige Fähigkeit für moderne Entwickler. Container bieten eine unveränderliche Infrastruktur, einfache Verteilung und leichtgewichtige Laufzeitumgebungen. In diesem ausführlichen Leitfaden gehen wir durch die Bereitstellung einer Beispiel-API in einem Docker-Container und pushen sie anschließend in Docker Hub, wobei wir den Schritten folgen, die im umfassenden Video-Tutorial von Tim Corey gezeigt werden: "Deploying to a Container and Docker Hub - Building a Sample API in C#."
Lassen Sie uns den Prozess Schritt für Schritt erkunden, wobei wir uns auf bestimmte Zeitstempel beziehen, um den Prozess leicht nachvollziehen zu können. Dieser Leitfaden beinhaltet die Verwendung von Befehlen wie .NET publish, dem docker run-Befehl und Begriffen wie Basis-Image, Runtime-Image und Container-Image - alles wichtige Konzepte für die Bereitstellung einer .NET-Anwendung mit Docker.
Zu Beginn des Videos hebt Tim die Nützlichkeit einer Beispielanwendung beim Erlernen der Webentwicklung hervor. Die App enthält Endpunkte wie /courses und /health, simuliert reale Probleme wie z. B. verschlechterte Gesundheitsprüfungen und ist so konzipiert, dass sie sowohl auf Ihrem lokalen Rechner als auch auf einem Remote-Server ausgeführt werden kann.
Es handelt sich um eine .NET Core-Anwendung (genauer gesagt um eine minimale ASP.NET Core-API), die problemlos über Docker-Container ausgeführt und getestet werden kann.
Tim überprüft, ob Docker auf seinem lokalen Rechner installiert ist, indem er Docker Desktop verwendet. Er merkt an, dass es möglich ist, direkt auf Docker Hub zu veröffentlichen, ohne dass Docker lokal installiert ist, aber zur Demonstration beginnt er mit der lokalen Bereitstellung.
Er zeigt zwei vorinstallierte Docker-Images:
Ein persönliches Tool für Untertitel
Das offizielle ASP.NET Core-Basisbild von Microsoft: mcr.microsoft.com/dotnet/aspnet
Dieses Basis-Image ist etwa 328 MB groß und dient als Grundlage für unser Container-Image. Microsoft hostet diese Images auf seiner MCR (Microsoft Container Registry) und unterstützt sowohl Linux- als auch Windows-Container. Für dieses Projekt ist Linux das Zielbetriebssystem.
Tim navigiert zum API-Projektordner und führt den folgenden Befehl in der Befehlszeile aus:
dotnet publish -p:PublishProfile=DefaultContainerdotnet publish -p:PublishProfile=DefaultContainerDieser Befehl verwendet die eingebaute Container-Unterstützung in .NET 8 und .NET 9, wodurch eine Dockerdatei nicht mehr erforderlich ist. Der Veröffentlichungsprozess wählt ein geeignetes Laufzeit-Image aus und erstellt ein in sich geschlossenes Container-Image.
So sieht es unter der Haube aus:
Die Projektdatei (.csproj) wird zur Erstellung der API verwendet
Abhängigkeiten werden mit dem Befehl .NET restore wiederhergestellt
Die Ausgabe wird in einem Veröffentlichungsordner abgelegt
Es wird eine DLL-Datei erstellt und in den Container eingebettet
Das resultierende Bild ist etwa 333 MB groß (nur 5 MB größer als die Basisdatei).
Sobald das Image erstellt ist, verwendet Tim Docker Desktop, um den Container auszuführen. Intern lauscht die Anwendung auf Port 8080. Tim ordnet diesen Port einem zufälligen Host-Port zu, indem er in der Port-Konfiguration 0 eingibt.
Der Container wird mit einem zufälligen Namen gestartet (z. B. elegant_hoover), und der Browser öffnet sich, um eine funktionierende API mit "Hello World" als Standardantwort anzuzeigen.
Durch das Aufrufen von /courses und /health bestätigt Tim, dass die API funktioniert. Der Endpunkt für den Gesundheitscheck ist nützlich, um ein Szenario für eine Produktionsumgebung zu simulieren.
Um laufende Container anzuzeigen, können Sie den Befehl docker ps in der CLI verwenden. Tim löscht anschließend den laufenden Container und das Image, um die Bereinigung zu demonstrieren.
Als Nächstes geht Tim zum Teil der Cloud-Bereitstellung über. Er meldet sich bei seinem Docker Hub-Konto an und erstellt ein öffentliches Repository namens thesampleapi.
Hier wird das Docker-Image veröffentlicht, damit andere es verwenden können:
docker pull timcorey/thesampleapi:latest' There is no direct equivalent of a Docker CLI command in VB.NET code.
' This command is run directly in the terminal or command prompt.In der Projektdatei der API fügt Tim Metadaten hinzu, um festzulegen, wo und wie das Docker-Image veröffentlicht werden soll. Er fügt den folgenden Codeblock hinzu:
<ContainerRegistry>docker.io</ContainerRegistry>
<ContainerRepository>timcorey/thesampleapi</ContainerRepository>
<ContainerImageTags>1.0.0;latest</ContainerImageTags><ContainerRegistry>docker.io</ContainerRegistry>
<ContainerRepository>timcorey/thesampleapi</ContainerRepository>
<ContainerImageTags>1.0.0;latest</ContainerImageTags>ContainerRegistrierung: Gibt Docker Hub als Zielregistrierung an.
ContainerRepository: Der Pfad zum Docker Hub Repo.
ContainerImageTags: Kennzeichnet das Bild für die Versionierung und die neueste Version.
Dies bereitet das Bild für einen mehrstufigen Build-Flow in der Zukunft vor, obwohl Tim die Dinge im Moment einfach hält.
Tim führt denselben Veröffentlichungsbefehl erneut aus:
dotnet publish -p:PublishProfile=DefaultContainerdotnet publish -p:PublishProfile=DefaultContainerZunächst schlägt der Push fehl, weil er vergessen hat, die .csproj-Datei zu speichern. Nach dem Speichern und erneuten Ausführen des Befehls wird das Bild erfolgreich in Docker Hub hochgeladen.
In Docker Hub erscheinen sowohl die neuesten als auch die 1.0.0-Tags unter dem thesampleapi-Repository. Diese Tags ermöglichen Flexibilität beim Ziehen bestimmter Versionen.
Tim demonstriert, wie man das Image von einem beliebigen Rechner mit installiertem Docker zieht:
docker pull timcorey/thesampleapi:latest' There is no direct equivalent of a Docker CLI command in VB.NET code.
' This command is run directly in the terminal or command prompt.Dank der Zwischenspeicherung auf Docker-Ebene kann das Bild schnell heruntergeladen werden, da das meiste davon bereits im Basisbild vorhanden ist.
So führen Sie das Bild aus:
docker run -p 0:8080 timcorey/thesampleapi:latestdocker run -p 0:8080 timcorey/thesampleapi:latestDamit wird ein zufälliger Host-Port auf den internen Port 8080 abgebildet.
Um die Versionierung zu demonstrieren, bearbeitet Tim die .csproj-Datei:
<ContainerImageTags>1.0.1;latest</ContainerImageTags><ContainerImageTags>1.0.1;latest</ContainerImageTags>Anschließend führt er den Veröffentlichungsbefehl erneut aus:
dotnet publish -p:PublishProfile=DefaultContainerdotnet publish -p:PublishProfile=DefaultContainerDas Docker Hub Repository zeigt nun drei Tags an:
1.0.0
1.0.1
neueste Version (zeigt jetzt auf 1.0.1)
Tim erklärt, dass Docker trotz mehrerer Tags keine doppelten Schichten speichert und die Festplattennutzung durch getrennte Schichten optimiert.
Tim betont, dass das Image, sobald es sich auf Docker Hub befindet, jederzeit auf jedem beliebigen Rechner ausgeführt werden kann, indem es verwendet wird:
docker pull timcorey/thesampleapi:latest' There is no direct equivalent of a Docker CLI command in VB.NET code.
' This command is run directly in the terminal or command prompt.Verwenden Sie dann den Befehl docker run, um es zu starten. Wenn Sie fertig sind, räumen Sie mit auf:
docker ps # Get container ID
docker stop <id> # Stop the container
docker rm <id> # Remove the container
docker rmi <image> # Remove the imagedocker ps ' Get container ID
docker stop <id> ' Stop the container
docker rm <id> ' Remove the container
docker rmi <image> ' Remove the imageEr erklärt, dass dies die perfekte Lösung für On-Demand-Entwicklung und -Tests ist, ohne dass Ihr lokaler Rechner überlastet wird.
Abschließend weist Tim auf den nächsten Schritt hin: die Bereitstellung derselben API auf einem Virtual Private Server (VPS). Er wird die Zuordnung einer Domäne und die Konfiguration des Containers für den öffentlichen Zugriff erläutern.
Mit Hilfe des Videos von Tim Corey haben wir:
Eine .NET Core API mit .NET new console erstellt
.NET restore und .NET publish verwendet, um zu erstellen und bereitzustellen
Erstellen eines Docker-Containers, ohne dass eine Beispiel-Dockerdatei erforderlich ist
Hochladen des Container-Images auf Docker Hub
Der Container wurde mit Docker Run entnommen und ausgeführt
Verwaltete Tags und unterschiedliche Bildebenen
Vorbereitet für Produktionsumgebungen mit versionierten Images
Dieser Workflow, der sich um Docker und .NET dreht, eignet sich perfekt für den Aufbau skalierbarer, testbarer und gemeinsamer Anwendungen.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy