Visual Studio Container Tools s ASP.NET Core
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Visual Studio 2017 a novější verze podporují sestavování, ladění a spouštění kontejnerizovaných aplikací ASP.NET Core, které cílí na .NET Core. Podporují se kontejnery pro Windows i Linux.
Zobrazení nebo stažení ukázkového kódu (postup stažení)
Požadavky
- Docker for Windows
- Visual Studio 2019 s úlohou vývoje pro různé platformy .NET Core
Instalace a nastavení
Při instalaci Dockeru si nejprve projděte informace v Dockeru pro Windows: Co potřebujete vědět před instalací. Dále nainstalujte Docker pro Windows.
Sdílené jednotky v Dockeru pro Windows musí být nakonfigurované tak, aby podporovaly mapování a ladění svazků. Klikněte pravým tlačítkem myši na ikonu Dockeru na hlavním panelu systému, vyberte Nastavení a vyberte Sdílené jednotky. Vyberte jednotku, do které Docker ukládá soubory. Klikněte na tlačítko Použit.
Tip
Visual Studio 2017 verze 15.6 a novější výzva, když nejsou nakonfigurované sdílené jednotky .
Přidání projektu do kontejneru Dockeru
Pokud chcete kontejnerizovat projekt ASP.NET Core, musí projekt cílit na .NET Core. Podporují se linuxové i windows kontejnery.
Při přidávání podpory Dockeru do projektu zvolte kontejner Pro Windows nebo Linux. Hostitel Dockeru musí mít stejný typ kontejneru. Pokud chcete změnit typ kontejneru ve spuštěné instanci Dockeru, klikněte pravým tlačítkem myši na ikonu Dockeru na hlavním panelu a zvolte Přepnout na kontejnery Windows... nebo Přepněte na kontejnery Linuxu....
Nová aplikace
Při vytváření nové aplikace pomocí šablon projektů ASP.NET Core Web Application zaškrtněte políčko Povolit podporu Dockeru:
Pokud je cílová architektura .NET Core, rozevírací seznam operačního systému umožňuje výběr typu kontejneru.
Existující aplikace
Pro projekty ASP.NET Core, které cílí na .NET Core, existují dvě možnosti pro přidání podpory Dockeru prostřednictvím nástrojů. Otevřete projekt v sadě Visual Studio a zvolte jednu z následujících možností:
- V nabídce Project vyberte Podporu Dockeru.
- Klikněte pravým tlačítkem na projekt v Průzkumník řešení a vyberte Přidat>podporu Dockeru.
Visual Studio Container Tools nepodporuje přidání Dockeru do existujícího projektu ASP.NET Core, který cílí na .NET Framework.
Přehled souboru Dockerfile
Do kořenového adresáře projektu se přidá soubor Dockerfile, recept na vytvoření konečné image Dockeru. Informace o příkazech v něm najdete v referenčních informacích k souboru Dockerfile. Tento konkrétní soubor Dockerfile používá vícefázové sestavení se čtyřmi odlišnými pojmenovanými fázemi sestavení:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1 AS base
WORKDIR /app
EXPOSE 59518
EXPOSE 44364
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build
WORKDIR /src
COPY HelloDockerTools/HelloDockerTools.csproj HelloDockerTools/
RUN dotnet restore HelloDockerTools/HelloDockerTools.csproj
COPY . .
WORKDIR /src/HelloDockerTools
RUN dotnet build HelloDockerTools.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish HelloDockerTools.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "HelloDockerTools.dll"]
Předchozí image souboru Dockerfile zahrnuje balíčky ASP.NET Core Runtime a NuGet. Balíčky jsou zkompilované za běhu (JIT), aby se zlepšil výkon při spuštění.
Když je zaškrtnuté políčko Konfigurovat pro HTTPS nového projektu, soubor Dockerfile zveřejňuje dva porty. Jeden port se používá pro provoz HTTP; druhý port se používá pro HTTPS. Pokud políčko není zaškrtnuté, zobrazí se pro provoz HTTP jeden port (80).
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY HelloDockerTools/HelloDockerTools.csproj HelloDockerTools/
RUN dotnet restore HelloDockerTools/HelloDockerTools.csproj
COPY . .
WORKDIR /src/HelloDockerTools
RUN dotnet build HelloDockerTools.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish HelloDockerTools.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "HelloDockerTools.dll"]
Předchozí image souboru Dockerfile zahrnuje balíčky ASP.NET Core NuGet, které jsou zkompilované za běhu (JIT), aby se zlepšil výkon spouštění.
Přidání podpory orchestrátoru kontejnerů do aplikace
Visual Studio 2017 verze 15.7 nebo starší podporuje Docker Compose jako jediné řešení orchestrace kontejnerů. Artefakty Docker Compose se přidávají prostřednictvím přidání>podpory Dockeru.
Visual Studio 2017 verze 15.8 nebo novější přidává řešení orchestrace pouze v případech, kdy je k tomu pokyn. Klikněte pravým tlačítkem na projekt v Průzkumník řešení a vyberte Přidat>podporu nástroje Container Orchestrator. K dispozici jsou následující možnosti:
Docker Compose
Nástroje kontejneru sady Visual Studio přidávají do řešení projekt docker-compose s následujícími soubory:
- docker-compose.dcproj: Soubor představující projekt.
<DockerTargetOS>
Obsahuje prvek určující operační systém, který se má použít. - .dockerignore: Vypíše vzory souborů a adresářů, které se mají vyloučit při generování kontextu sestavení.
- docker-compose.yml: Základní soubor Docker Compose, který slouží k definování kolekce imagí vytvořených a spuštěných pomocí
docker-compose build
adocker-compose run
v uvedeném pořadí. - docker-compose.override.yml: Volitelný soubor, přečtený docker Compose, s přepsáním konfigurace pro služby. Visual Studio se spustí
docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml"
pro sloučení těchto souborů.
Soubor docker-compose.yml odkazuje na název image, která se vytvoří při spuštění projektu:
version: '3.4'
services:
hellodockertools:
image: ${DOCKER_REGISTRY}hellodockertools
build:
context: .
dockerfile: HelloDockerTools/Dockerfile
V předchozím příkladu vygeneruje image při image: hellodockertools
spuštění aplikace v režimu ladění.hellodockertools:dev
Image hellodockertools:latest
se vygeneruje, když se aplikace spustí v režimu vydání .
Předpona názvu image pomocí uživatelského jména Docker Hubu (například) v případě, dockerhubusername/hellodockertools
že se image odešle do registru. Případně změňte název image tak, aby zahrnoval adresu URL privátního registru (například privateregistry.domain.com/hellodockertools
) v závislosti na konfiguraci.
Pokud chcete jiné chování na základě konfigurace sestavení (například ladění nebo verze), přidejte soubory docker-compose specifické pro konfiguraci. Soubory by měly být pojmenovány podle konfigurace sestavení (například docker-compose.vs.debug.yml a docker-compose.vs.release.yml) a umístěné ve stejném umístění jako soubor docker-compose-override.yml.
Pomocí přepsání konfiguračních souborů můžete pro konfigurace sestavení ladění a vydané verze zadat různá nastavení konfigurace (například proměnné prostředí nebo vstupní body).
Aby nástroj Docker Compose zobrazil možnost spuštění v sadě Visual Studio, musí být projekt Dockeru spouštěným projektem.
Service Fabric
Kromě základních požadavků vyžaduje řešení orchestrace Service Fabric následující požadavky:
- Microsoft Azure Service Fabric SDK verze 2.6 nebo novější
- Sada funkcí Vývoj pro Azure v sadě Visual Studio
Service Fabric nepodporuje spouštění linuxových kontejnerů v místním vývojovém clusteru ve Windows. Pokud projekt už používá kontejner Linuxu, Visual Studio zobrazí výzvu k přepnutí na kontejnery Windows.
Nástroje kontejneru sady Visual Studio dělají následující úlohy:
<>Přidá do řešení projekt aplikace Service Fabric project_name.
Přidá soubor Dockerfile a soubor .dockerignore do projektu ASP.NET Core. Pokud soubor Dockerfile již v projektu ASP.NET Core existuje, přejmenuje se na Dockerfile.original. Vytvoří se nový soubor Dockerfile podobný následujícímu:
# See https://aka.ms/containerimagehelp for information on how to use Windows Server 1709 containers with Service Fabric. # FROM microsoft/aspnetcore:2.0-nanoserver-1709 FROM microsoft/aspnetcore:2.0-nanoserver-sac2016 ARG source WORKDIR /app COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "HelloDockerTools.dll"]
<IsServiceFabricServiceProject>
Přidá prvek do souboru projektu.csproj
ASP.NET Core:<IsServiceFabricServiceProject>True</IsServiceFabricServiceProject>
Přidá složku PackageRoot do projektu ASP.NET Core. Složka obsahuje manifest služby a nastavení pro novou službu.
Další informace najdete v tématu Nasazení aplikace .NET v kontejneru Windows do Azure Service Fabric.
Ladění
V rozevíracím seznamu ladění na panelu nástrojů vyberte Docker a spusťte ladění aplikace. Zobrazení Dockeru v okně Výstup ukazuje následující akce, které se provádějí:
- Získá se značka modulu runtime 2.1-aspnetcore-runtime image modulu microsoft/dotnet runtime (pokud ještě není v mezipaměti). Image nainstaluje moduly runtime ASP.NET Core a .NET Core a přidružené knihovny. Je optimalizovaná pro spouštění aplikací ASP.NET Core v produkčním prostředí.
- Proměnná
ASPNETCORE_ENVIRONMENT
prostředí je nastavená naDevelopment
uvnitř kontejneru. - Zveřejňují se dva dynamicky přiřazené porty: jeden pro HTTP a druhý pro HTTPS. Port přiřazený k localhostu se dá dotazovat pomocí
docker ps
příkazu. - Aplikace se zkopíruje do kontejneru.
- Ve výchozím prohlížeči se spustí ladicí program připojený ke kontejneru pomocí dynamicky přiřazeného portu.
Výsledná image Dockeru aplikace je označená jako vývojová. Image je založená na značce 2.1-aspnetcore-runtime základní image microsoft/dotnet. docker images
Spusťte příkaz v okně konzoly Správce balíčků (PMC). Zobrazí se image na počítači:
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools dev d72ce0f1dfe7 30 seconds ago 255MB
microsoft/dotnet 2.1-aspnetcore-runtime fcc3887985bb 6 days ago 255MB
- Image modulu runtime microsoft/aspnetcore se získá (pokud ještě není v mezipaměti).
- Proměnná
ASPNETCORE_ENVIRONMENT
prostředí je nastavená naDevelopment
uvnitř kontejneru. - Port 80 se vystaví a mapuje na dynamicky přiřazený port pro localhost. Port je určený hostitelem Dockeru a dá se dotazovat pomocí
docker ps
příkazu. - Aplikace se zkopíruje do kontejneru.
- Ve výchozím prohlížeči se spustí ladicí program připojený ke kontejneru pomocí dynamicky přiřazeného portu.
Výsledná image Dockeru aplikace je označená jako vývojová. Image je založená na základní imagi microsoft/aspnetcore . docker images
Spusťte příkaz v okně konzoly Správce balíčků (PMC). Zobrazí se image na počítači:
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools dev 5fafe5d1ad5b 4 minutes ago 347MB
microsoft/aspnetcore 2.0 c69d39472da9 13 days ago 347MB
Poznámka:
Image vývoje nemá obsah aplikace, protože konfigurace ladění používají připojení svazku k zajištění iterativního prostředí. K nasdílení image použijte konfiguraci vydané verze .
docker ps
Spusťte příkaz v PMC. Všimněte si, že aplikace běží pomocí kontejneru:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
baf9a678c88d hellodockertools:dev "C:\\remote_debugge..." 21 seconds ago Up 19 seconds 0.0.0.0:37630->80/tcp dockercompose4642749010770307127_hellodockertools_1
Upravit a pokračovat
Změny statických souborů a Razor zobrazení se automaticky aktualizují bez nutnosti kroku kompilace. Proveďte změnu, uložte a aktualizujte prohlížeč, aby se aktualizace zobrazila.
Úpravy souboru kódu vyžadují kompilaci a restartování Kestrel v rámci kontejneru. Po provedení změny použijte CTRL+F5
k provedení procesu a spuštění aplikace v kontejneru. Kontejner Dockeru není znovu sestaven ani zastaven. docker ps
Spusťte příkaz v PMC. Všimněte si, že původní kontejner stále běží před 10 minutami:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
baf9a678c88d hellodockertools:dev "C:\\remote_debugge..." 10 minutes ago Up 10 minutes 0.0.0.0:37630->80/tcp dockercompose4642749010770307127_hellodockertools_1
Publikování imagí Dockeru
Po dokončení vývojového a ladicího cyklu aplikace vám nástroje Visual Studio Container Tools pomůžou vytvořit produkční image aplikace. Změňte rozevírací seznam konfigurace na Vydání a sestavte aplikaci. Nástroj získá image kompilace/publikování z Docker Hubu (pokud ještě není v mezipaměti). Image se vytvoří s nejnovější značkou, která se dá odeslat do privátního registru nebo Docker Hubu.
Spuštěním docker images
příkazu v PMC zobrazte seznam imagí. Zobrazí se výstup podobný následujícímu:
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools latest e3984a64230c About a minute ago 258MB
hellodockertools dev d72ce0f1dfe7 4 minutes ago 255MB
microsoft/dotnet 2.1-sdk 9e243db15f91 6 days ago 1.7GB
microsoft/dotnet 2.1-aspnetcore-runtime fcc3887985bb 6 days ago 255MB
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools latest cd28f0d4abbd 12 seconds ago 349MB
hellodockertools dev 5fafe5d1ad5b 23 minutes ago 347MB
microsoft/aspnetcore-build 2.0 7fed40fbb647 13 days ago 2.02GB
microsoft/aspnetcore 2.0 c69d39472da9 13 days ago 347MB
microsoft/aspnetcore
Obrázky microsoft/aspnetcore-build
uvedené v předchozím výstupu se nahradí imagemi microsoft/dotnet
jako .NET Core 2.1. Další informace najdete v oznámení o migraci úložišť Dockeru.
Poznámka:
Příkaz docker images
vrátí zprostředkující image s názvy úložišť a značkami identifikovanými jako <žádné> (není uvedeno výše). Tyto nepojmenované image vytváří soubor Dockerfile pro vícefázové sestavení. Zlepšují efektivitu vytváření konečné image – pouze potřebné vrstvy se znovu sestaví, když dojde ke změnám. Pokud už zprostředkující image nepotřebujete, odstraňte je pomocí příkazu docker rmi .
V porovnání s vývojovou imagí může být očekávaná velikost produkční image nebo image vydané verze. Kvůli mapování svazků se ladicí program a aplikace spouštěly z místního počítače, a ne v kontejneru. Nejnovější image zabalila potřebný kód aplikace ke spuštění aplikace na hostitelském počítači. Rozdíl je tedy velikost kódu aplikace.
Další materiály
- Vývoj kontejnerů pomocí sady Visual Studio
- Azure Service Fabric: Příprava vývojového prostředí
- Nasazení aplikace .NET v kontejneru Windows do Azure Service Fabric
- Řešení potíží s vývojem sady Visual Studio pomocí Dockeru
- Úložiště GitHub pro Visual Studio Container Tools
- GC s využitím Dockeru a malých kontejnerů
- System.IO.IOException: Byl dosažen nakonfigurovaný limit uživatele (128) počtu inotify instancí.
- Aktualizace imagí Dockeru