Visual Studio Container Tools s ASP.NET Core

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

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 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.

Dialog to select local C drive sharing for containers

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:

Enable Docker Support checkbox

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 vytvořených a spuštěných imagí a docker-compose builddocker-compose runv 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:

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á na Development 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á na Development 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