Visual Studio Container Tools for Docker
Narzędzia zawarte w programie Visual Studio do tworzenia za pomocą kontenerów platformy Docker są łatwe w użyciu i znacznie upraszczają kompilowanie, debugowanie i wdrażanie konteneryzowanych aplikacji. Możesz pracować z kontenerem dla pojedynczego projektu lub używać orkiestracji kontenerów z narzędziem Docker Compose lub Service Fabric do pracy z wieloma usługami w kontenerach.
Wymagania wstępne
- Docker Desktop
- Program Visual Studio 2019 z zainstalowanym pakietem roboczym Tworzenie aplikacji internetowych, narzędzi platformy Azure i/lub pakietem roboczym programowania dla wielu platform .NET Core
- .NET Core Development Tools for development tools for development with .NET Core (Narzędzia programistyczne .NET Core do programowania za pomocą platformy .NET Core).
- Aby opublikować w usłudze Azure Container Registry, subskrypcja platformy Azure. Utwórz konto w celu uzyskania bezpłatnej wersji próbnej.
Obsługa platformy Docker w programie Visual Studio
Obsługa platformy Docker jest dostępna dla projektów ASP.NET, projektów ASP.NET Core oraz projektów konsoli .NET Core i .NET Framework.
Obsługa platformy Docker w programie Visual Studio zmieniła się w wielu wersjach w odpowiedzi na potrzeby klientów. Istnieją dwa poziomy obsługi platformy Docker, które można dodać do projektu, a obsługiwane opcje różnią się w zależności od typu projektu i wersji programu Visual Studio. W przypadku niektórych obsługiwanych typów projektów, jeśli chcesz tylko kontener dla pojedynczego projektu, bez używania aranżacji, możesz to zrobić, dodając obsługę platformy Docker. Następnym poziomem jest obsługa orkiestracji kontenerów, która dodaje odpowiednie pliki pomocy technicznej dla wybranego koordynatora.
W programie Visual Studio 2019 można używać programów Docker Compose, Kubernetes i Service Fabric jako usług orkiestracji kontenerów.
Uwaga
Podczas tworzenia projektu konsoli .NET Framework lub .NET Core nie ma możliwości dodania obsługi platformy Docker. Po utworzeniu projektu aplikacji konsolowej platformy .NET Core dostępna jest opcja Dodaj obsługę platformy Docker. Projekty aplikacji konsolowych programu .NET Framework nie obsługują opcji Dodaj obsługę platformy Docker po utworzeniu projektu. Po utworzeniu zarówno projektów konsoli .NET Framework, jak i .NET Core obsługują opcję Dodaj obsługę orkiestratora kontenerów przy użyciu usługi Service Fabric lub narzędzia Docker Compose.
W programie Visual Studio 2019 w wersji 16.4 lub nowszej jest dostępne okno Kontenery , które umożliwia wyświetlanie uruchomionych kontenerów, przeglądanie dostępnych obrazów, wyświetlanie zmiennych środowiskowych, dzienników i mapowań portów, inspekcję systemu plików, dołączanie debugera lub otwieranie okna terminalu w środowisku kontenera. Zobacz Korzystanie z okna Kontenery.
Wymagania wstępne
- Docker Desktop
- Program Visual Studio 2022 z zainstalowanym pakietem roboczym Tworzenie aplikacji internetowych, narzędzi platformy Azure i/lub pakietem roboczym programowanie aplikacji klasycznych .NET
- Aby opublikować w usłudze Azure Container Registry, subskrypcja platformy Azure. Utwórz konto w celu uzyskania bezpłatnej wersji próbnej.
Obsługa platformy Docker w programie Visual Studio
Obsługa platformy Docker jest dostępna dla projektów ASP.NET, projektów ASP.NET Core oraz projektów konsoli .NET Core i .NET Framework.
Obsługa platformy Docker w programie Visual Studio zmieniła się w wielu wersjach w odpowiedzi na potrzeby klientów. Istnieje kilka opcji dodawania obsługi platformy Docker do projektu, a obsługiwane opcje różnią się w zależności od typu projektu i wersji programu Visual Studio. W przypadku niektórych obsługiwanych typów projektów, jeśli chcesz tylko kontener dla pojedynczego projektu, bez używania aranżacji, możesz to zrobić, dodając obsługę platformy Docker. Następnym poziomem jest obsługa orkiestracji kontenerów, która dodaje odpowiednie pliki pomocy technicznej dla wybranego koordynatora.
W programie Visual Studio 2022 w wersji 17.9 lub nowszej po dodaniu obsługi platformy Docker do projektu platformy .NET 7 lub nowszego masz dwa typy kompilacji kontenerów do wyboru w celu dodania obsługi platformy Docker. Możesz dodać plik Dockerfile, aby określić sposób kompilowania obrazów kontenerów lub użyć wbudowanej obsługi kontenera udostępnianej przez zestaw SDK platformy .NET.
Ponadto w programie Visual Studio 2022 lub nowszym po wybraniu orkiestracji kontenerów można użyć narzędzia Docker Compose lub Service Fabric jako usług orkiestracji kontenerów.
Uwaga
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żywania usługi Service Fabric lub narzędzia Docker Compose. Dodanie obsługi tworzenia projektu i dodanie obsługi platformy Docker dla pojedynczego projektu bez orkiestracji nie jest dostępne.
W programie Visual Studio 2022 jest dostępne okno Kontenery , które umożliwia wyświetlanie uruchomionych kontenerów, przeglądanie dostępnych obrazów, wyświetlanie zmiennych środowiskowych, dzienników i mapowań portów, sprawdzanie systemu plików, dołączanie debugera lub otwieranie okna terminalu w środowisku kontenera. Zobacz Korzystanie z okna Kontenery.
Uwaga
Wymagania dotyczące licencjonowania platformy Docker mogą się różnić w przypadku różnych wersji programu Docker Desktop. Zapoznaj się z dokumentacją platformy Docker, aby zrozumieć bieżące wymagania licencyjne dotyczące korzystania z wersji programu Docker Desktop na potrzeby programowania w danej sytuacji.
Dodawanie obsługi platformy Docker
Obsługę platformy Docker można włączyć podczas tworzenia projektu, wybierając pozycję Włącz obsługę platformy Docker podczas tworzenia nowego projektu, jak pokazano na poniższym zrzucie ekranu:
Uwaga
W przypadku projektów .NET Framework (nie .NET Core) dostępne są tylko kontenery systemu Windows.
Obsługę platformy Docker można dodać do istniejącego projektu, wybierając pozycję Dodaj>obsługę platformy Docker w Eksplorator rozwiązań. Polecenia Dodaj > obsługę platformy Docker i Dodaj > obsługę orkiestratora kontenerów znajdują się w menu prawym przyciskiem myszy (lub menu kontekstowym) węzła projektu dla projektu ASP.NET Core w Eksplorator rozwiązań, jak pokazano na poniższym zrzucie ekranu:
Dodawanie obsługi platformy Docker
Po dodaniu lub włączeniu obsługi platformy Docker program Visual Studio doda następujący kod do projektu:
- plik Dockerfile
.dockerignore
plik- odwołanie do pakietu NuGet do elementu Microsoft.VisualStudio.Azure.Containers.Tools.Targets
Dodany plik Dockerfile będzie podobny do poniższego kodu. W tym przykładzie projekt miał nazwę WebApplication-Docker
i 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: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"]
Dodawanie obsługi platformy Docker przy użyciu typu kompilacji kontenera Dockerfile
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 .NET Framework ani projektach usługi Azure Functions.
W wersji 17.11 lub nowszej można również określić dystrybucję obrazu kontenera i kontekst kompilacji platformy Docker.
Dystrybucja obrazu kontenera określa obraz systemu operacyjnego używany przez kontenery jako obraz podstawowy. 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
- Alpine
Uwaga
Kontenery oparte na obrazie systemu Ubuntu z użyciem natywnego wdrożenia 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 zdecydowanie zalecany. Wszystkie pliki potrzebne do kompilacji muszą znajdować się w tym folderze, co zwykle nie ma miejsca w przypadku wybrania folderu projektu lub innego folderu.
Jeśli wybierzesz plik Dockerfile, program Visual Studio doda następujące elementy do projektu:
- plik Dockerfile
- plik .dockerignore
- odwołanie do pakietu NuGet do elementu Microsoft.VisualStudio.Azure.Containers.Tools.Targets
Dodany plik Dockerfile będzie podobny do poniższego kodu. W tym przykładzie projekt miał nazwę WebApplication-Docker
i 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: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"]
Konteneryzowanie aplikacji .NET bez pliku Dockerfile
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.
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 obraz systemu operacyjnego używany przez kontenery jako obraz podstawowy. Ta lista zmienia się, jeśli przełączasz się między systemami Linux i Windows jako kontener. Zobacz poprzednią sekcję, aby uzyskać listę dostępnych obrazów.
Wpis kompilacji kontenera zestawu .NET SDK w launchSettings.json wygląda jak następujący kod:
"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 dystrybucja obrazu kontenera jest zapisywana w pliku projektu jako ContainerBaseImage
właściwość. Później można go zmienić, edytując plik projektu.
<PropertyGroup>
<ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>
Korzystanie z okna Kontenery
Okno Kontenery umożliwia wyświetlanie kontenerów i obrazów na maszynie i sprawdzenie, co się z nimi dzieje. Można wyświetlić system plików, woluminy zainstalowane, zmienne środowiskowe, używane porty i zbadać pliki dziennika.
Otwórz okno Kontenery przy użyciu szybkiego uruchamiania (Ctrl+Q) i wpisz containers
polecenie . Możesz użyć kontrolek dokowania, aby umieścić okno gdzieś. Ze względu na szerokość okna działa najlepiej po zadokowaniu w dolnej części ekranu.
Wybierz kontener i użyj kart, aby wyświetlić dostępne informacje. Aby ją sprawdzić, uruchom aplikację z obsługą platformy Docker, otwórz kartę Pliki i rozwiń folder aplikacji , aby wyświetlić wdrożoną aplikację w kontenerze.
Aby uzyskać więcej informacji, zobacz Używanie okna Kontenery.
Obsługa narzędzia Docker Compose
Jeśli chcesz utworzyć rozwiązanie z wieloma kontenerami przy użyciu narzędzia Docker Compose, dodaj obsługę orkiestratora kontenerów do projektów. Umożliwia to uruchamianie i debugowanie grupy kontenerów (całego rozwiązania lub grupy projektów) w tym samym czasie, jeśli są one zdefiniowane w tym samym pliku docker-compose.yml .
Aby dodać obsługę orkiestratora kontenerów przy użyciu narzędzia Docker Compose, kliknij prawym przyciskiem myszy węzeł projektu w Eksplorator rozwiązań, a następnie wybierz polecenie Dodaj > obsługę orkiestratora kontenerów. Następnie wybierz pozycję Docker Compose , aby zarządzać kontenerami.
Po dodaniu obsługi orkiestratora kontenerów do projektu zobaczysz plik Dockerfile dodany do projektu (jeśli jeszcze go nie istnieje) i folder docker-compose dodany do rozwiązania w Eksplorator rozwiązań, jak pokazano poniżej:
Jeśli docker-compose.yml już istnieje, program Visual Studio dodaje do niego tylko wymagane wiersze kodu konfiguracji.
Powtórz proces z innymi projektami, które chcesz kontrolować przy użyciu narzędzia Docker Compose.
Jeśli pracujesz z dużą liczbą usług, możesz zaoszczędzić czas i zasoby obliczeniowe, wybierając podzbiór usług, które chcesz rozpocząć w sesji debugowania. Zobacz Uruchamianie podzestawu usług Compose.
Uwaga
Należy pamiętać, że zdalne hosty platformy Docker nie są obsługiwane w narzędziach programu Visual Studio.
Obsługa usługi Service Fabric
Za pomocą narzędzi usługi Service Fabric w programie Visual Studio można opracowywać i debugować usługę Azure Service Fabric, uruchamiać i debugować lokalnie oraz wdrażać na platformie Azure.
Program Visual Studio 2019 lub nowszy obsługują tworzenie konteneryzowanych mikrousług przy użyciu kontenerów systemu Windows i orkiestracji usługi Service Fabric.
Aby uzyskać szczegółowy samouczek, zobacz Samouczek: wdrażanie aplikacji .NET w kontenerze systemu Windows w usłudze Azure Service Fabric.
Aby uzyskać więcej informacji na temat usługi Azure Service Fabric, zobacz Service Fabric.
Ciągłe dostarczanie i ciągła integracja (CI/CD)
Program Visual Studio łatwo integruje się z usługą Azure Pipelines w celu zautomatyzowanej i ciągłej integracji oraz dostarczania zmian w kodzie i konfiguracji usługi. Aby rozpocząć, zobacz Tworzenie pierwszego potoku.
Aby zapoznać się z usługą Service Fabric, zobacz Samouczek: wdrażanie aplikacji ASP.NET Core w usłudze Azure Service Fabric przy użyciu usługi Azure DevOps Projects.
Następne 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:
Debugowanie aplikacji w lokalnym kontenerze platformy Docker
Wdrażanie kontenera ASP.NET w rejestrze kontenerów przy użyciu programu Visual Studio