Visual Studio-Containertools für Docker
Die in Visual Studio enthaltenen Tools für die Entwicklung mit Docker-Containern sind einfach zu verwenden und können das Erstellen, Debuggen und Bereitstellen von Containeranwendungen erheblich vereinfachen. Sie können mit einem Container für ein einzelnes Projekt arbeiten oder die Containerorchestrierung mit Docker Compose oder Service Fabric zum Arbeiten mit mehreren Diensten in Containern verwenden.
Voraussetzungen
- Docker Desktop
- Visual Studio 2019 mit installierten Workloads für Webentwicklung, Azure-Tools und/oder plattformübergreifende .NET Core-Entwicklung
- .NET Core-Entwicklungstools für die Entwicklung mit .NET Core.
- Zum Veröffentlichen in Azure Container Registry ist ein Azure-Abonnement erforderlich. Registrieren Sie sich für eine kostenlose Testversion.
Docker-Unterstützung in Visual Studio
Docker-Unterstützung ist für ASP.NET-Projekte, ASP.NET Core-Projekte sowie .NET Core- und .NET Framework-Konsolenprojekte verfügbar.
Die Unterstützung für Docker in Visual Studio hat sich im Verlauf einer Reihe von Versionen aufgrund von Kundenanforderungen geändert. Es gibt zwei Stufen der Docker-Unterstützung, die Sie einem Projekt hinzufügen können, und die unterstützten Optionen unterscheiden sich je nach Projekttyp und Visual Studio-Version. Bei einigen unterstützten Projekttypen können Sie in dem Fall, dass Sie nur einen Container für ein einzelnes Projekt ohne Verwendung der Orchestrierung wünschen, die Docker-Unterstützung hinzufügen. Die nächste Stufe ist die Unterstützung der Containerorchestrierung, bei der entsprechende Unterstützungsdateien für den jeweils ausgewählten Orchestrator hinzugefügt werden.
Bei Visual Studio 2019 können Sie Docker Compose, Kubernetes und Service Fabric als Containerorchestrierungsdienste verwenden.
Hinweis
Beim Erstellen eines .NET Framework- oder .NET Core-Konsolenprojekts gibt es keine Option zum Hinzufügen von Docker-Unterstützung. Nachdem ein .NET Core-Konsolenanwendungsprojekt erstellt wurde, ist die Option Docker-Unterstützung hinzufügen verfügbar. .NET Framework-Konsolenanwendungsprojekte bieten keine Unterstützung für die Option Docker-Unterstützung hinzufügen, nachdem das Projekt erstellt wurde. Nach der Erstellung unterstützen sowohl .NET Framework- als auch .NET Core-Konsolenprojekten die Option Unterstützung für Containerorchestrator hinzufügen mit Service Fabric oder Docker Compose.
In Visual Studio 2019 Version 16.4 und höher ist das Fenster Container verfügbar, über das Sie ausgeführte Container, Umgebungsvariablen, Protokolle und Portzuordnungen anzeigen, verfügbare Images durchsuchen, das Dateisystem untersuchen, einen Debugger anfügen oder ein Terminalfenster in der Containerumgebung öffnen können. Weitere Informationen finden Sie unter Verwenden des Fensters „Container“.
Voraussetzungen
- Docker Desktop
- Visual Studio 2022 mit den installierten Workloads Webentwicklung, Azure-Tools und/oder .NET Desktop-Entwicklung
- Zum Veröffentlichen in Azure Container Registry ist ein Azure-Abonnement erforderlich. Registrieren Sie sich für eine kostenlose Testversion.
Docker-Unterstützung in Visual Studio
Docker-Unterstützung ist für ASP.NET-Projekte, ASP.NET Core-Projekte sowie .NET Core- und .NET Framework-Konsolenprojekte verfügbar.
Die Unterstützung für Docker in Visual Studio hat sich im Verlauf einer Reihe von Versionen aufgrund von Kundenanforderungen geändert. Es gibt mehrere Optionen, um einem Projekt Docker-Unterstützung hinzuzufügen, und die unterstützten Optionen variieren je nach Projekttyp und Version von Visual Studio. Bei einigen unterstützten Projekttypen können Sie in dem Fall, dass Sie nur einen Container für ein einzelnes Projekt ohne Verwendung der Orchestrierung wünschen, die Docker-Unterstützung hinzufügen. Die nächste Stufe ist die Unterstützung der Containerorchestrierung, bei der entsprechende Unterstützungsdateien für den jeweils ausgewählten Orchestrator hinzugefügt werden.
Wenn Sie mit Visual Studio 2022 Version 17.9 oder höher Docker-Unterstützung zu einem Projekt mit .NET 7 oder höher hinzufügen, haben Sie zwei Containerbuildtypen zur Auswahl, um Docker-Unterstützung hinzuzufügen. Sie können entweder eine Dockerfile hinzufügen, um festzulegen, wie die Containerimages erstellt werden sollen, oder Sie können die integrierte Containerunterstützung des .NET SDK verwenden.
Außerdem können Sie mit Visual Studio 2022 und höher, wenn Sie die Containerorchestrierung auswählen, Docker Compose oder Service Fabric als Container-Orchestrierungsdienste verwenden.
Hinweis
Wenn Sie die vollständige Projektvorlage der .NET Framework-Konsole verwenden, steht Ihnen nach dem Erstellen eines Projekts die Option Unterstützung für Containerorchestrator hinzufügen zur Verfügung. Zusätzlich haben Sie die Wahl, ob Sie Service Fabric oder Docker Compose verwenden möchten. Sie haben bei Einzelprojekten ohne Orchestrierung nicht die Möglichkeit, bereits während der Projekterstellung Unterstützung hinzuzufügen. Auch die Option Add Docker Support (Docker-Support hinzufügen) steht Ihnen nicht zur Verfügung.
In Visual Studio 2022 ist das Fenster Container verfügbar, über das Sie ausgeführte Container, Umgebungsvariablen, Protokolle und Portzuordnungen anzeigen, verfügbare Images durchsuchen, das Dateisystem untersuchen, einen Debugger anfügen oder ein Terminalfenster in der Containerumgebung öffnen können. Weitere Informationen finden Sie unter Verwenden des Fensters „Container“.
Hinweis
Die Lizenzierungsanforderungen von Docker können für verschiedene Versionen von Docker Desktop unterschiedlich sein. Informationen zu den aktuellen Lizenzierungsanforderungen für die Verwendung Ihrer Docker Desktop-Version für die Entwicklung in Ihrer Situation finden Sie in der Docker-Dokumentation.
Hinzufügen der Docker-Unterstützung
Sie können die Docker-Unterstützung während der Projekterstellung aktivieren, indem Sie beim Erstellen eines neuen Projekts die Option Docker-Unterstützung aktivieren auswählen, wie im folgenden Screenshot gezeigt:
Hinweis
Für .NET Framework-Projekte (nicht .NET Core) sind nur Windows-Container verfügbar.
Sie können die Docker-Unterstützung einem vorhandenen Projekt hinzufügen, indem Sie im Projektmappen-Explorer die Option Hinzufügen>Docker-Unterstützung auswählen. Die Befehle Hinzufügen > Docker-Unterstützung und Hinzufügen > Unterstützung für Containerorchestrator befinden sich im Projektmappen-Explorer im Kontextmenü des Projektknotens für ein ASP.NET Core-Projekt wie im folgenden Screenshot gezeigt:
Hinzufügen der Docker-Unterstützung
Wenn Sie die Docker-Unterstützung hinzufügen oder aktivieren, fügt Visual Studio dem Projekt Folgendes hinzu:
- eine Dockerfile-Datei
- eine
.dockerignore
-Datei - einen NuGet-Paketverweis auf „Microsoft.VisualStudio.Azure.Containers.Tools.Targets“
Das von Ihnen hinzugefügte Dockerfile ähnelt dem folgenden Code. In diesem Beispiel heißt das Projekt WebApplication-Docker
, und Sie haben Linux-Container ausgewählt:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["WebApplication-Docker/WebApplication-Docker.csproj", "WebApplication-Docker/"]
RUN dotnet restore "WebApplication-Docker/WebApplication-Docker.csproj"
COPY . .
WORKDIR "/src/WebApplication-Docker"
RUN dotnet build "WebApplication-Docker.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebApplication-Docker.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication-Docker.dll"]
Hinzufügen der Docker-Unterstützung mithilfe des Dockerfile-Containerbuildtyps
Wenn Sie einem Projekt mit .NET 7 oder höher die Docker-Unterstützung hinzufügen oder aktivieren, zeigt Visual Studio das Dialogfeld Containergerüstoptionen an, in dem Sie nicht nur das Betriebssystem (Linux oder Windows), sondern auch den Containerbuildtyp, entweder Dockerfile oder .NET SDK auswählen können. Dieses Dialogfeld wird in .NET Framework-Projekten oder Azure Functions-Projekten nicht angezeigt.
In 17.11 und höher können Sie auch die Containerimage-Distro und den Docker Build-Kontext angeben.
Containerimage-Distro gibt an, welches Betriebssystemimage Ihre Container als Basisimage verwenden. Diese Liste ändert sich, wenn Sie zwischen Linux und Windows als Containertyp wechseln.
Die folgenden Images stehen zur Verfügung:
Windows:
- Windows Nano Server (empfohlen, nur verfügbar 8.0 und höher, nicht voreingestellt für Native Ahead-of-Time(AOT)-Bereitstellungsprojekte )
- Windows Server Core (nur für 8.0 und höher verfügbar)
Linux:
- Standard (Debian, aber das Tag ist "8.0")
- Debian
- Ubuntu
- Chiseled Ubuntu
- Alpine
Hinweis
Container, die auf dem Chiseled Ubuntu-Image basieren und die Native Ahead-of-time (AOT) Bereitstellung verwenden, können nur im Fast-Modus debugged werden. Siehe Docker-Container in Visual Studio anpassen.
Docker-Buildkontext gibt den Ordner an, der für den Docker-Build verwendet wird. Siehe Docker-Buildkontext. Der Standard ist der Lösungsordner, der dringend empfohlen wird. Alle für einen Build erforderlichen Dateien müssen sich unter diesem Ordner befinden. Dies ist in der Regel nicht der Fall, wenn Sie den Projektordner oder einen anderen Ordner auswählen.
Wenn Sie Dockerfile auswählen, fügt Visual Studio dem Projekt Folgendes hinzu:
- eine Dockerfile-Datei
- eine DOCKERIGNORE-Datei
- einen NuGet-Paketverweis auf „Microsoft.VisualStudio.Azure.Containers.Tools.Targets“
Das von Ihnen hinzugefügte Dockerfile ähnelt dem folgenden Code. In diesem Beispiel heißt das Projekt WebApplication-Docker
, und Sie haben Linux-Container ausgewählt:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApplication-Docker/WebApplication-Docker.csproj", "WebApplication-Docker/"]
RUN dotnet restore "WebApplication-Docker/WebApplication-Docker.csproj"
COPY . .
WORKDIR "/src/WebApplication-Docker"
RUN dotnet build "WebApplication-Docker.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebApplication-Docker.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication-Docker.dll"]
Containerisieren einer .NET-App ohne Dockerfile
Wenn Visual Studio 2022 17.9 und höher mit dem .NET 7 SDK installiert ist, in ASP.NET Core-Projekten, die auf .NET 6 oder höher abzielen, haben Sie die Möglichkeit, die integrierte Unterstützung von .NET SDK für Containerbuilds zu verwenden, was bedeutet, dass Sie keine Dockerfile benötigen, siehe Containerisieren einer .NET-App mit dotnet publish. Stattdessen konfigurieren Sie Ihre Container mithilfe von MSBuild-Eigenschaften in der Projektdatei und die Einstellungen zum Starten der Container mit Visual Studio werden in einer .json
Konfigurationsdatei, launchSettings.json codiert.
Wählen Sie hier .NET SDK als Containerbuildtyp aus, um die Containerverwaltung von .NET SDK anstelle einer Dockerfile-Datei zu verwenden.
Containerimage-Distro gibt an, welches Betriebssystemimage Ihre Container als Basisimage verwenden. Diese Liste ändert sich, wenn Sie zwischen Linux und Windows als Container wechseln. Eine Liste der verfügbaren Images finden Sie im vorherigen Abschnitt.
Der Eintrag für die Erstellung des .NET SDK-Containers in launchSettings.json sieht wie der folgende Code aus:
"Container (.NET SDK)": {
"commandName": "SdkContainer",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
"environmentVariables": {
"ASPNETCORE_HTTPS_PORTS": "8081",
"ASPNETCORE_HTTP_PORTS": "8080"
},
"publishAllPorts": true,
"useSSL": true
}
Das .NET SDK verwaltet einige der Einstellungen, die in einer Dockerfile codiert worden wären, z. B. das Containerbasisimage und die festzulegenden Umgebungsvariablen. Die in der Projektdatei verfügbaren Einstellungen für die Containerkonfiguration sind unter Anpassen Ihres Containers aufgeführt. Beispielsweise wird die Containerimage-Distro in der Projektdatei als ContainerBaseImage
Eigenschaft gespeichert. Sie können sie später ändern, indem Sie die Projektdatei bearbeiten.
<PropertyGroup>
<ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>
Verwenden des Fensters „Container“
Im Fenster Container können Sie Container und Images auf Ihrem Computer anzeigen und beobachten, was mit ihnen passiert. Sie können das Dateisystem, bereitgestellte Volumes, Umgebungsvariablen, verwendete Ports und Protokolldateien anzeigen.
Öffnen Sie das Fenster Container, indem Sie den Schnellstart mit STRG+Q durchführen, und geben Sie containers
ein. Sie können die Andocksteuerelemente verwenden, um das Fenster an eine andere Stelle zu verschieben. Aufgrund der Breite des Fensters funktioniert es am besten, wenn Sie es am unteren Rand des Bildschirms andocken.
Wählen Sie einen Container aus, und verwenden Sie die Registerkarten, um die verfügbaren Informationen anzeigen zu können. Führen Sie dazu Ihre Docker-fähige App aus, öffnen Sie die Registerkarte Dateien, und erweitern Sie den App-Ordner, um Ihre bereitgestellte App im Container zu anzuzeigen.
Weitere Informationen finden Sie unter Verwenden des Container-Fensters.
Docker Compose-Unterstützung
Wenn Sie eine Projektmappe mit mehreren Containern unter Verwendung von Docker Compose erstellen möchten, fügen Sie Ihren Projekten die Unterstützung der Containerorchestrierung hinzu. Dadurch können Sie eine Gruppe von Containern (eine gesamte Projektmappe oder eine Gruppe von Projekten) gleichzeitig ausführen und debuggen, wenn diese in derselben docker-compose.yml-Datei definiert sind.
Um die Unterstützung des Containerorchestrators unter Verwendung von Docker Compose hinzuzufügen, klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe oder den Projektknoten und wählen Hinzufügen > Unterstützung für Containerorchestrator aus. Wählen Sie dann Docker Compose aus, um die Container zu verwalten.
Nachdem Sie Ihrem Projekt die Unterstützung der Containerorchestrierung hinzugefügt haben, können Sie im Projektmappen-Explorer sehen, dass dem Projekt (sofern bisher noch nicht vorhanden) ein Dockerfile und der Projektmappe ein Ordner docker-compose hinzugefügt wurde, wie hier gezeigt:
Wenn docker-compose.yml bereits vorhanden ist, fügt Visual Studio nur die erforderlichen Zeilen zum Konfigurationscode hinzu.
Wiederholen Sie den Vorgang für die anderen Projekte, die Sie mithilfe von Docker Compose steuern möchten.
Wenn Sie mit mehreren Diensten arbeiten möchten, können Sie Zeit und Computeressourcen sparen, indem Sie auswählen, welche Teilmenge der Dienste Sie in Ihrer Debugsitzung starten möchten. Weitere Informationen finden Sie unter Starten einer Teilmenge der Compose-Dienste.
Hinweis
Beachten Sie, dass Remote-Docker-Hosts in Visual Studio-Tools nicht unterstützt werden.
Service Fabric-Unterstützung
Mit Service Fabric-Tools in Visual Studio können Sie für Azure Service Fabric entwickeln und debuggen, lokal ausführen und debuggen sowie in Azure bereitstellen.
Visual Studio 2019 und höher unterstützt die Entwicklung von Containermicroservices mithilfe von Windows-Containern und der Service Fabric-Orchestrierung.
Ein ausführliches Tutorial finden Sie unter Tutorial: Bereitstellen einer .NET-Anwendung in einem Windows-Container in Azure Service Fabric.
Weitere Informationen zu Azure Service Fabric finden Sie unter Service Fabric.
Continuous Delivery und Continuous Integration (CI/CD)
Visual Studio lässt sich problemlos in Azure Pipelines integrieren, um eine automatisierte und kontinuierliche Integration und Bereitstellung von Änderungen an Ihrem Servicecode und Ihrer Konfiguration zu ermöglichen. Informationen zu den ersten Schritten finden Sie unter Erstellen Ihrer ersten Pipeline.
Informationen zu Service Fabric finden Sie unter Tutorial: Bereitstellen einer ASP.NET Core-App in Azure Service Fabric mithilfe von Azure DevOps Projects.
Nächste Schritte
Weitere Informationen zur Implementierung der Dienste und Verwendung von Visual Studio-Tools für das Arbeiten mit Containern finden Sie in den folgenden Artikeln:
Debuggen von Apps in einem lokalen Docker-Container
Bereitstellen eines ASP.NET-Containers an eine Containerregistrierung mithilfe von Visual Studio