Udostępnij przez


Dodawanie obsługi kontenerów

Obsługę kontenerów platformy Docker można dodać w obsługiwanych typach projektów programu Visual Studio, takich jak projekty internetowe ASP.NET i inne. Zapoznaj się z omówieniem , aby uzyskać informacje o obsługiwanych typach projektów w używanej wersji programu Visual Studio.

Obsługę kontenerów platformy Docker lub Podman można dodać w obsługiwanych typach projektów programu Visual Studio, takich jak ASP.NET projekty internetowe i inne. Zapoznaj się z omówieniem , aby uzyskać informacje o obsługiwanych typach projektów w używanej wersji programu Visual Studio.

Wymagania wstępne

Wymagania wstępne

Dodawanie obsługi kontenerów podczas tworzenia projektu

Obsługę kontenerów podczas tworzenia projektu można włączyć, wybierając pozycję Włącz obsługę kontenerów podczas tworzenia nowego projektu, jak pokazano na poniższym zrzucie ekranu:

Zrzut ekranu przedstawiający sposób włączania obsługi kontenerów dla nowej aplikacji internetowej ASP.NET Core w programie Visual Studio.

Uwaga / Notatka

W przypadku projektów .NET Framework (nie .NET Core) dostępne są tylko kontenery systemu Windows.

Uwaga / Notatka

Jeśli używasz pełnego szablonu projektu konsoli programu .NET Framework, obsługiwaną opcją jest dodanie obsługi orkiestratora kontenerów po utworzeniu projektu z opcjami użycia usługi Service Fabric lub narzędzia Docker Compose. Dodanie obsługi przy tworzeniu projektu i dodanie obsługi platformy Docker dla pojedynczego projektu bez orkiestracji nie jest opcją.

Uwaga / Notatka

Obsługa kontenerów programu .NET Framework została przerwana w bieżącej wersji programu Visual Studio. Kontenery programu .NET Framework były obsługiwane do programu Visual Studio 2022 w wersji 17.14.

Dodawanie obsługi kontenera do istniejącego projektu

Obsługę platformy Docker można dodać do istniejącego projektu, wybierając pozycję Dodaj>obsługę kontenera w Eksploratorze rozwiązań. Polecenia Dodaj > obsługę kontenera i Dodaj > obsługę orkiestratora kontenerów są dostępne w menu kontekstowym (po kliknięciu prawym przyciskiem myszy) węzła projektu dla projektu ASP.NET Core w Eksploratorze rozwiązań, jak pokazano na poniższym zrzucie ekranu:

Zrzut ekranu przedstawiający opcję menu Dodaj obsługę kontenera w programie Visual Studio.

Wybieranie typu kompilacji kontenera i innych opcji

Po dodaniu lub włączeniu obsługi kontenera w projekcie platformy .NET 7 lub nowszym program Visual Studio wyświetla okno dialogowe Opcje tworzenia szkieletu kontenera , które daje wybór systemu operacyjnego (Linux lub Windows), ale także możliwość wyboru typu kompilacji kontenera, dockerfile lub zestawu SDK platformy .NET.

Można również określić dystrybucję obrazu kontenerowego i kontekst budowania kontenera.

Zrzut ekranu przedstawiający okno dialogowe Opcje tworzenia szkieletu kontenera w celu dodania obsługi kontenerów.

Dystrybucja obrazu kontenera określa, jaki obraz systemu operacyjnego jest używany jako podstawowy dla kontenerów. Ta lista zmieni się, jeśli przełączysz się między systemami Linux i Windows jako typ kontenera.

Dostępne są następujące obrazy:

Windows:

  • System Windows Nano Server (zalecany, dostępny tylko w wersji 8.0 lub nowszej, a nie jest wstępnie ustawiony dla projektów wdrażania natywnego przed czasem (AOT)
  • Windows Server Core (tylko wersja 8.0 lub nowsza)

Linux:

  • Wartość domyślna (Debian, ale tag jest zgodny z docelową wersją platformy .NET)
  • Debian
  • Ubuntu
  • Chiseled Ubuntu
  • Alpejski

Uwaga / Notatka

Kontenery oparte na obrazie Chiseled Ubuntu z natywnym wdrożeniem ahead-of-time (AOT) mogą być debugowane tylko w trybie szybkim. Zobacz Dostosowywanie kontenerów platformy Docker w programie Visual Studio.

Kontekst kompilacji kontenera określa folder, który jest używany dla docker build (lub podman build). Zobacz Kontekst kompilacji platformy Docker lub Kompilacja narzędzia Podman. Wartość domyślna to folder rozwiązania, który jest zalecany. Wszystkie pliki potrzebne do kompilacji muszą znajdować się w tym folderze, co nie ma miejsca w przypadku wybrania folderu projektu lub innego folderu.

Typ kompilacji kontenera dockerfile

Jeśli wybierzesz typ kompilacji kontenera Dockerfile , program Visual Studio doda następujące elementy do projektu:

  • plik Dockerfile
  • .dockerignore plik
  • odwołanie do pakietu NuGet dla Microsoft.VisualStudio.Azure.Containers.Tools.Targets

Dodany plik Dockerfile będzie podobny do poniższego kodu. W tym przykładzie projekt miał nazwę WebApplication-Dockeri wybrano kontenery systemu Linux:

# 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"]

Typ kompilacji kontenera zestawu SDK platformy .NET

Możesz użyć wbudowanej obsługi zestawu .NET SDK dla kompilacji kontenerów, co oznacza, że nie potrzebujesz pliku Dockerfile; zobacz Containerize a .NET app with dotnet publish (Konteneryzowanie aplikacji .NET za pomocą polecenia dotnet publish). Zamiast tego należy skonfigurować kontenery przy użyciu właściwości msBuild w pliku projektu, a ustawienia uruchamiania kontenerów za pomocą programu Visual Studio są kodowane w .json pliku konfiguracji ,launchSettings.json.

Zrzut ekranu przedstawiający okno dialogowe Opcje tworzenia szkieletu kontenera służące do dodawania obsługi platformy Docker przy użyciu zestawu .NET SDK wybranego jako typ kompilacji kontenera.

W tym miejscu wybierz zestaw .NET SDK jako typ kompilacji kontenera, aby używać zarządzania kontenerami zestawu SDK platformy .NET zamiast pliku Dockerfile.

Dystrybucja obrazu kontenera określa, jaki obraz systemu operacyjnego jest używany jako podstawowy dla kontenerów. Ta lista zmienia się, jeśli przełączasz się między systemami Linux i Windows jako środowisko kontenera. Zobacz poprzednią sekcję, aby uzyskać listę dostępnych obrazów.

Wpis budowania kontenera .NET SDK w launchSettings.json wygląda następująco:

"Container (.NET SDK)": {
  "commandName": "SdkContainer",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_HTTPS_PORTS": "8081",
    "ASPNETCORE_HTTP_PORTS": "8080"
  },
  "publishAllPorts": true,
  "useSSL": true
}

Zestaw .NET SDK zarządza niektórymi ustawieniami, które zostałyby zakodowane w pliku Dockerfile, takim jak obraz podstawowy kontenera, oraz zmienne środowiskowe do ustawienia. Ustawienia dostępne w pliku projektu dla konfiguracji kontenera są wyświetlane w temacie Dostosowywanie kontenera. Na przykład Container Image Distro jest zapisywana w pliku projektu jako właściwość ContainerBaseImage. Później można go zmienić, edytując plik projektu.

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>

Wybieranie typu kompilacji kontenera i innych opcji

Po dodaniu lub włączeniu obsługi platformy Docker w projekcie platformy .NET 7 lub nowszym program Visual Studio wyświetli okno dialogowe Opcje tworzenia szkieletu kontenera , co daje wybór systemu operacyjnego (Linux lub Windows), ale także możliwość wybierania typu kompilacji kontenera, pliku Dockerfile lub zestawu SDK platformy .NET. To okno dialogowe nie jest wyświetlane w projektach programu .NET Framework.

W wersji 17.11 lub nowszej można również określić dystrybucję obrazu kontenera i kontekst budowy Docker.

Zrzut ekranu przedstawiający okno dialogowe Opcje tworzenia szkieletu kontenera w celu dodania obsługi platformy Docker.

Dystrybucja obrazu kontenera określa, jaki obraz systemu operacyjnego jest używany jako podstawowy dla kontenerów. Ta lista zmieni się, jeśli przełączysz się między systemami Linux i Windows jako typ kontenera.

Dostępne są następujące obrazy:

Windows:

  • System Windows Nano Server (zalecany, dostępny tylko w wersji 8.0 lub nowszej, a nie jest wstępnie ustawiony dla projektów wdrażania natywnego przed czasem (AOT)
  • Windows Server Core (tylko wersja 8.0 lub nowsza)

Linux:

  • Wartość domyślna (Debian, ale tag to "8.0")
  • Debian
  • Ubuntu
  • Chiseled Ubuntu
  • Alpejski

Uwaga / Notatka

Kontenery oparte na obrazie Chiseled Ubuntu z natywnym wdrożeniem ahead-of-time (AOT) mogą być debugowane tylko w trybie szybkim. Zobacz Dostosowywanie kontenerów platformy Docker w programie Visual Studio.

Kontekst kompilacji platformy Docker określa folder używany do kompilacji platformy Docker. Zobacz Kontekst kompilacji platformy Docker. Wartość domyślna to folder rozwiązania, który jest zalecany. Wszystkie pliki potrzebne do kompilacji muszą znajdować się w tym folderze, co nie ma miejsca w przypadku wybrania folderu projektu lub innego folderu.

Typ kompilacji kontenera dockerfile

Jeśli wybierzesz typ kompilacji kontenera Dockerfile , program Visual Studio doda następujące elementy do projektu:

  • plik Dockerfile
  • .dockerignore plik
  • odwołanie do pakietu NuGet dla Microsoft.VisualStudio.Azure.Containers.Tools.Targets

Dodany plik Dockerfile będzie podobny do poniższego kodu. W tym przykładzie projekt miał nazwę WebApplication-Dockeri wybrano kontenery systemu Linux:

#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"]

Typ kompilacji kontenera zestawu SDK platformy .NET

W programie Visual Studio 2022 17.9 lub nowszym z zainstalowanym zestawem SDK platformy .NET 7 w projektach platformy ASP.NET Core przeznaczonych dla platformy .NET 6 lub nowszego masz możliwość korzystania z wbudowanej obsługi zestawu .NET SDK dla kompilacji kontenerów, co oznacza, że nie potrzebujesz pliku Dockerfile; zobacz Containerize a .NET app with dotnet publish (Konteneryzowanie aplikacji .NET za pomocą polecenia dotnet publish). Zamiast tego należy skonfigurować kontenery przy użyciu właściwości msBuild w pliku projektu, a ustawienia uruchamiania kontenerów za pomocą programu Visual Studio są kodowane w .json pliku konfiguracji ,launchSettings.json.

Zrzut ekranu przedstawiający okno dialogowe Opcje tworzenia szkieletu kontenera służące do dodawania obsługi platformy Docker przy użyciu zestawu .NET SDK wybranego jako typ kompilacji kontenera.

W tym miejscu wybierz zestaw .NET SDK jako typ kompilacji kontenera, aby używać zarządzania kontenerami zestawu SDK platformy .NET zamiast pliku Dockerfile.

Dystrybucja obrazu kontenera określa, jaki obraz systemu operacyjnego jest używany jako podstawowy dla kontenerów. Ta lista zmienia się, jeśli przełączasz się między systemami Linux i Windows jako środowisko kontenera. Zobacz poprzednią sekcję, aby uzyskać listę dostępnych obrazów.

Wpis budowania kontenera .NET SDK w launchSettings.json wygląda następująco:

"Container (.NET SDK)": {
  "commandName": "SdkContainer",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_HTTPS_PORTS": "8081",
    "ASPNETCORE_HTTP_PORTS": "8080"
  },
  "publishAllPorts": true,
  "useSSL": true
}

Zestaw .NET SDK zarządza niektórymi ustawieniami, które zostałyby zakodowane w pliku Dockerfile, takim jak obraz podstawowy kontenera, oraz zmienne środowiskowe do ustawienia. Ustawienia dostępne w pliku projektu dla konfiguracji kontenera są wyświetlane w temacie Dostosowywanie kontenera. Na przykład Container Image Distro jest zapisywana w pliku projektu jako właściwość ContainerBaseImage. Później można go zmienić, edytując plik projektu.

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>

Dalsze kroki

Aby uzyskać więcej informacji na temat implementacji usług i używania narzędzi programu Visual Studio do pracy z kontenerami, przeczytaj następujące artykuły:

Platforma Docker w programie Visual Studio

Debugowanie aplikacji w kontenerze lokalnym

Wdrażanie kontenera ASP.NET w rejestrze kontenerów przy użyciu programu Visual Studio

Wdrażanie w usłudze Azure App Service

Wdrażanie w usłudze Azure Container Apps przy użyciu programu Visual Studio