Freigeben über


Hinzufügen von Unterstützung für Container

Sie können Unterstützung für Docker-Container in unterstützten Visual Studio-Projekttypen hinzufügen, z. B. ASP.NET Webprojekte und andere. Informationen zu unterstützten Projekttypen in Ihrer Version von Visual Studio finden Sie in der Übersicht .

Sie können Unterstützung für Docker- oder Podman-Container in unterstützten Visual Studio-Projekttypen hinzufügen, z. B. ASP.NET Webprojekte und andere. Informationen zu unterstützten Projekttypen in Ihrer Version von Visual Studio finden Sie in der Übersicht .

Voraussetzungen

Voraussetzungen

Hinzufügen der Containerunterstützung beim Erstellen eines Projekts

Sie können die Unterstützung für Container während der Projekterstellung aktivieren, indem Sie die Containerunterstützung aktivieren, wenn Sie ein neues Projekt erstellen, wie im folgenden Screenshot gezeigt:

Screenshot, der zeigt, wie Containerunterstützung für neue ASP.NET Core Web App in Visual Studio aktiviert wird.

Hinweis

Für .NET Framework-Projekte (nicht .NET Core) sind nur Windows-Container verfügbar.

Hinweis

Wenn Sie die vollständige .NET Framework-Konsolenprojektvorlage verwenden, ist die unterstützte Option, Container Orchestrator-Unterstützung hinzuzufügen, nach der Projekterstellung verfügbar, mit Optionen zur Verwendung von Service Fabric oder Docker Compose. Das Hinzufügen von Support bei der Projekterstellung und das Hinzufügen von Docker-Unterstützung für ein einzelnes Projekt ohne Orchestrierung sind keine Optionen verfügbar.

Hinweis

Die Unterstützung für .NET Framework-Container wird in der aktuellen Version von Visual Studio nicht mehr unterstützt. .NET Framework-Container wurden bis zu Visual Studio 2022 17.14 unterstützt.

Hinzufügen der Containerunterstützung zu einem vorhandenen Projekt

Sie können einem vorhandenen Projekt Docker-Unterstützung hinzufügen, indem Sie im Projektmappen-Explorer>hinzufügen" auswählen. Die Befehle "Containerunterstützung hinzufügen>" und "Container-Orchestrator-Unterstützung hinzufügen>" befinden sich im Kontextmenü des Projektknotens für ein ASP.NET Core-Projekt im Projektmappen-Explorer, wie im folgenden Screenshot gezeigt.

Screenshot der Menüoption

Wählen Sie den Container-Build-Typ und andere Optionen

Wenn Sie containerunterstützung zu einem .NET 7- oder höher-Projekt hinzufügen oder aktivieren, zeigt Visual Studio das Dialogfeld " Containergerüstoptionen " an, das Ihnen die Wahl des Betriebssystems (Linux oder Windows) ermöglicht, aber auch die Möglichkeit zum Auswählen des Containerbuildtyps, entweder Dockerfile oder .NET SDK.

Sie können auch das Containerimage-Distro und den Container-Build-Kontext angeben.

Screenshot des Dialogfelds

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:

Linux:

  • Standard (Debian, aber das Tag entspricht Ihrer .NET-Zielversion)
  • Debian
  • Ubuntu
  • Chiseled Ubuntu (eine optimierte Version von Ubuntu)
  • Alpin

Hinweis

Container, die auf dem Chiseled Ubuntu-Image basieren und die Native Ahead-of-Time (AOT)-Bereitstellung verwenden, können nur im Fast-Modus gedebuggt werden. Siehe Anpassen von Docker-Containern in Visual Studio.

Container-Build-Kontext gibt den Ordner an, der für docker build (oder podman build) verwendet wird. Siehe Docker-Buildkontext oder Podman-Build. Der Standard ist der Lösungsordner, der empfohlen wird. Alle für einen Build erforderlichen Dateien müssen sich unter diesem Ordner befinden. Dies ist nicht der Fall, wenn Sie den Projektordner oder einen anderen Ordner auswählen.

Dockerfile-Container-Buildtyp

Wenn Sie den Buildtyp des Dockerfile-Containers 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 benannt WebApplication-Docker, und Sie haben Linux-Container ausgewählt:

# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081


# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj", "WebApplication15-AddContainerSupport/"]
RUN dotnet restore "./WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj"
COPY . .
WORKDIR "/src/WebApplication15-AddContainerSupport"
RUN dotnet build "./WebApplication15-AddContainerSupport.csproj" -c $BUILD_CONFIGURATION -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./WebApplication15-AddContainerSupport.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication15-AddContainerSupport.dll"]

.NET SDK-Container-Build-Typ

Sie können die integrierte Unterstützung des .NET SDK für Containerbuilds 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 codiert,launchSettings.json.

Screenshot des Dialogfelds

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 Ihres Containers aufgeführt. Beispielsweise wird die Container-Image-Distribution in der Projektdatei als Eigenschaft ContainerBaseImage 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>

Wählen Sie den Container-Build-Typ und andere Optionen

Wenn Sie docker-Unterstützung zu einem .NET 7- oder höher-Projekt hinzufügen oder aktivieren, zeigt Visual Studio das Dialogfeld " Containergerüstoptionen " an, 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 nicht angezeigt.

In 17.11 und höher können Sie auch die Container-Image-Distro und den Docker-Build-Kontext angeben.

Screenshot des Dialogfelds

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:

Linux:

  • Standard (Debian, aber das Tag ist "8.0")
  • Debian
  • Ubuntu
  • Chiseled Ubuntu (eine optimierte Version von Ubuntu)
  • Alpin

Hinweis

Container, die auf dem Chiseled Ubuntu-Image basieren und die Native Ahead-of-Time (AOT)-Bereitstellung verwenden, können nur im Fast-Modus gedebuggt werden. Siehe Anpassen von Docker-Containern in Visual Studio.

Docker Build Context gibt den Ordner an, der für den Docker-Build verwendet wird. Siehe Docker-Buildkontext. Der Standard ist der Lösungsordner, der empfohlen wird. Alle für einen Build erforderlichen Dateien müssen sich unter diesem Ordner befinden. Dies ist nicht der Fall, wenn Sie den Projektordner oder einen anderen Ordner auswählen.

Dockerfile-Container-Buildtyp

Wenn Sie den Buildtyp des Dockerfile-Containers 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 benannt 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:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.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"]

.NET SDK-Container-Build-Typ

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 codiert,launchSettings.json.

Screenshot des Dialogfelds

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 Ihres Containers aufgeführt. Beispielsweise wird die Container-Image-Distribution in der Projektdatei als Eigenschaft ContainerBaseImage 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>

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:

Docker in Visual Studio

Debuggen von Apps in einem lokalen Container

Bereitstellen eines ASP.NET Containers in einer Containerregistrierung mithilfe von Visual Studio

Bereitstellen in Azure App Service

Bereitstellen in Azure-Container-Apps mit Visual Studio