Visual Studio-Containertools für Docker
Die in Visual Studio zum Entwickeln mit Docker-Containern enthaltenen Tools sind einfach zu verwenden und vereinfachen das Erstellen, Debuggen und Bereitstellen für containerisierte Anwendungen erheblich. Sie können mit einem Container für ein einzelnes Projekt arbeiten oder container-Orchestrierung mit Docker Compose oder Service Fabric verwenden, um mit mehreren Diensten in Containern zu arbeiten.
Voraussetzungen
- Docker Desktop
- Visual Studio 2019 mit den installierten Workloads für die Webentwicklung, die Azure Tools und/oder die plattformübergreifende .NET Core-Entwicklung
- .NET Core Development Tools 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 und .NET Core- und .NET Framework-Konsolenprojekte verfügbar.
Die Unterstützung für Docker in Visual Studio hat sich aufgrund der Kundenanforderungen über eine Reihe von Versionen geändert. Es gibt zwei Ebenen der Docker-Unterstützung, die Sie einem Projekt hinzufügen können, und die unterstützten Optionen variieren je nach Projekttyp und Version von Visual Studio. Wenn Sie bei einigen unterstützten Projekttypen nur einen Container für ein einzelnes Projekt benötigen, ohne die Orchestrierung zu verwenden, können Sie dies tun, indem Sie docker-Unterstützung hinzufügen. Die nächste Ebene ist container-Orchestrierungsunterstützung, die geeignete Supportdateien für den ausgewählten Orchestrator hinzufügt.
Mit Visual Studio 2019 können Sie Docker Compose, Kubernetes und Service Fabric als Container-Orchestrierungsdienste verwenden.
Anmerkung
Beim Erstellen eines .NET Framework- oder .NET Core-Konsolenprojekts gibt es keine Option zum Hinzufügen der Docker-Unterstützung. Nachdem ein .NET Core-Konsolenanwendungsprojekt erstellt wurde, ist die Option Docker-Unterstützung hinzufügen verfügbar. .NET Framework-Konsolenanwendungsprojekte unterstützen nach dem Erstellen des Projekts nicht die Option Docker-Unterstützung hinzufügen. 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, mit dem Sie ausgeführte Container anzeigen, verfügbare Bilder durchsuchen, Umgebungsvariablen, Protokolle und Portzuordnungen anzeigen, das Dateisystem überprüfen, einen Debugger anfügen oder ein Terminalfenster innerhalb der Containerumgebung öffnen können. Weitere Informationen finden Sie unter Verwenden des Fensters „Container“.
Voraussetzungen
- Docker Desktop
- Visual Studio 2022 mit den installierten Arbeitsauslastungen 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 und .NET Core- und .NET Framework-Konsolenprojekte verfügbar.
Die Unterstützung für Docker in Visual Studio hat sich aufgrund der Kundenanforderungen über eine Reihe von Versionen geändert. Es gibt mehrere Optionen zum Hinzufügen der Docker-Unterstützung zu einem Projekt, und die unterstützten Optionen variieren je nach Projekttyp und Version von Visual Studio. Wenn Sie bei einigen unterstützten Projekttypen nur einen Container für ein einzelnes Projekt benötigen, ohne die Orchestrierung zu verwenden, können Sie dies tun, indem Sie docker-Unterstützung hinzufügen. Die nächste Ebene ist container-Orchestrierungsunterstützung, die geeignete Supportdateien für den ausgewählten Orchestrator hinzufügt.
Mit Visual Studio 2022, Version 17.9 und höher, wenn Sie Docker-Unterstützung zu einem .NET 7- oder höher-Projekt hinzufügen, verfügen Sie über zwei Containerbuildtypen, aus denen Sie die Docker-Unterstützung hinzufügen können. Sie können eine Dockerfile-Datei hinzufügen, um anzugeben, wie die Containerimages erstellt werden sollen, oder Sie können die integrierte Containerunterstützung verwenden, die vom .NET SDK bereitgestellt wird.
Außerdem können Sie mit Visual Studio 2022 und höher, wenn Sie die Container-Orchestrierung auswählen, Docker Compose oder Service Fabric als Container-Orchestrierungsdienste verwenden.
Anmerkung
Wenn Sie die vollständige .NET Framework-Konsolenprojektvorlage verwenden, besteht die unterstützte Option darin, nach der Projekterstellung Container Orchestrator-Unterstützung hinzuzufügen, wobei Sie die Wahl zwischen Service Fabric oder Docker Compose haben. Sie haben bei Einzelprojekten ohne Orchestrierung nicht die Möglichkeit, bereits während der Projekterstellung Unterstützung hinzuzufügen. Auch die Option Docker-Unterstützung hinzufügen steht Ihnen nicht zur Verfügung.
In Visual Studio 2022 ist das fenster Container verfügbar, mit dem Sie ausgeführte Container anzeigen, verfügbare Bilder durchsuchen, Umgebungsvariablen, Protokolle und Portzuordnungen anzeigen, das Dateisystem überprüfen, einen Debugger anfügen oder ein Terminalfenster in der Containerumgebung öffnen können. Weitere Informationen finden Sie unter Verwenden des Fensters „Container“.
Anmerkung
Die Lizenzierungsanforderungen von Docker können für verschiedene Versionen von Docker Desktop unterschiedlich sein. Lesen Sie die Docker-Dokumentation, um die aktuellen Lizenzierungsanforderungen für die Verwendung Ihrer Version von Docker Desktop für die Entwicklung in Ihrer Situation zu verstehen.
Hinzufügen der Docker-Unterstützung
Sie können die Docker-Unterstützung während der Projekterstellung aktivieren, indem Sie Docker-Support aktivieren beim Erstellen eines neuen Projekts auswählen, wie im folgenden Screenshot gezeigt:
Anmerkung
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 wie im folgenden Screenshot gezeigt im Kontextmenü des Projektknotens für ein ASP.NET Core-Projekt:
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
.dockerignore
-Datei- Ein NuGet-Paketverweis auf Microsoft.VisualStudio.Azure.Containers.Tools.Targets
Die von Ihnen hinzugefügte Dockerfile ähnelt dem folgenden Code. In diesem Beispiel wurde das Projekt WebApplication-Docker
benannt, 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 docker-Unterstützung zu einem .NET 7- oder höher-Projekt hinzufügen oder aktivieren, zeigt Visual Studio das Dialogfeld Containergerüstoptionen, das Ihnen die Wahl des Betriebssystems (Linux oder Windows) bietet, aber auch die Möglichkeit, den Containerbuildtyp auszuwählen, entweder Dockerfile oder .NET SDK. Dieses Dialogfeld wird in .NET Framework-Projekten oder Azure Functions-Projekten nicht angezeigt.
In Version 17.11 und höher können Sie auch die Containerimage-Distro und den Docker-Buildkontext 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 Bilder sind verfügbar:
Fenster:
- Windows Nano Server (empfohlen, nur verfügbar in Version 8.0 und höher, nicht standardmäßig voreingestellt für native AOT-Bereitstellungsprojekte (Ahead of time))
- Windows Server Core (nur verfügbar 8.0 und höher)
Linux:
- Standard (Debian, aber das Tag ist "8.0")
- Debian
- Ubuntu
- Gemeißeltes Ubuntu
- Alpin
Anmerkung
Container, die auf dem Chiseled Ubuntu-Image basieren und die Native Ahead-of-Time (AOT)-Bereitstellung verwenden, können nur im Schnellmodus debuggt werden. Siehe Anpassen von Docker-Containern in Visual Studio.
Docker Build Context gibt den Ordner an, der für den Docker-Build verwendet wird. Weitere Informationen finden Sie unter 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
- Ein NuGet-Paketverweis auf Microsoft.VisualStudio.Azure.Containers.Tools.Targets
Die von Ihnen hinzugefügte Dockerfile ähnelt dem folgenden Code. In diesem Beispiel wurde das Projekt WebApplication-Docker
benannt, 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 Containerize a .NET app with 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 codiert, launchSettings.json.
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 Bilder finden Sie im vorherigen Abschnitt.
Der .NET SDK-Containerbuildeintrag 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-Datei codiert wurden, z. B. das Containerbasisimage und die festzulegenden Umgebungsvariablen. Die in der Projektdatei für die Containerkonfiguration verfügbaren Einstellungen werden unter Anpassen Des Containersaufgefü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 Bilder auf Ihrem Computer anzeigen und sehen, was mit ihnen passiert. Sie können das Dateisystem, die bereitgestellten Volumes, Umgebungsvariablen, verwendete Ports und Protokolldateien anzeigen.
Öffnen Sie das Fenster Container mithilfe der Schnellstartleiste (STRG+Q) und geben Sie containers
ein. Sie können die Docking-Steuerelemente verwenden, um das Fenster an einer beliebigen Stelle zu platzieren. Aufgrund der Breite des Fensters funktioniert es am besten, wenn es am unteren Bildschirmrand angedockt wird.
Wählen Sie einen Container aus, und verwenden Sie die Registerkarten, um die verfügbaren Informationen anzuzeigen. Um es auszuchecken, führen Sie Ihre Docker-fähige App aus, öffnen Sie die Registerkarte Dateien, und erweitern Sie den Ordner App, um die bereitgestellte App im Container anzuzeigen.
Weitere Informationen finden Sie unter Verwenden des Container-Fensters.
Docker Compose-Unterstützung
Wenn Sie eine Multicontainerlösung mit Docker Compose erstellen möchten, fügen Sie Ihren Projekten Container-Orchestratorunterstützung hinzu. Auf diese Weise können Sie eine Gruppe von Containern (eine ganze Projektmappe oder Eine Gruppe von Projekten) gleichzeitig ausführen und debuggen, wenn sie 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 den Projektknoten, und wählen Sie 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 wie im Folgenden gezeigt im Projektmappen-Explorer sehen, dass dem Projekt (sofern bisher noch nicht vorhanden) ein Dockerfile und der Projektmappe der Ordner docker-compose hinzugefügt wurde:
Wenn docker-compose.yml bereits vorhanden ist, fügt Visual Studio lediglich die erforderlichen Konfigurationscodezeilen hinzu.
Wiederholen Sie den Prozess mit den anderen Projekten, die Sie mithilfe von Docker Compose steuern möchten.
Wenn Sie mit einer großen Anzahl von Diensten arbeiten, können Sie Zeit und Rechenressourcen sparen, indem Sie auswählen, welche Teilmenge von Diensten Sie in Ihrer Debugsitzung starten möchten. Weitere Informationen finden Sie unter Starten einer Teilmenge der Compose-Dienste.
Anmerkung
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 Azure Service Fabric entwickeln und debuggen, lokal ausführen und debuggen und in Azure bereitstellen.
Visual Studio 2019 und höher unterstützen die Entwicklung von containerisierten Microservices mithilfe von Windows-Containern und Service Fabric-Orchestrierung.
Ein ausführliches Lernprogramm finden Sie im Lernprogramm: Bereitstellen einer .NET-Anwendung in einem Windows-Container in Azure Service Fabric.
Weitere Informationen zu Azure Service Fabric finden Sie unter Service Fabric.
Kontinuierliche Bereitstellung und kontinuierliche Integration (CI/CD)
Visual Studio lässt sich problemlos in Azure-Pipelines integrieren, um die automatische und kontinuierliche Integration und Bereitstellung von Änderungen an Ihrem Dienstcode und Ihrer Konfiguration zu ermöglichen. Informationen zu den ersten Schritten finden Sie unter Erstellen Ihrer ersten Pipeline.
Für Service Fabric, siehe Tutorial: Bereitstellung Ihrer ASP.NET Core-App in Azure Service Fabric mit Azure DevOps-Projekten.
Nächste Schritte
Weitere Informationen zur Implementierung und Verwendung von Visual Studio-Tools für die Arbeit mit Containern finden Sie in den folgenden Artikeln:
Debuggen von Apps in einem lokalen Docker-Container
Bereitstellen eines ASP.NET Containers in einer Containerregistrierung mithilfe von Visual Studio
Bereitstellen in Azure App Service
Bereitstellen in Azure Container Apps mithilfe von Visual Studio