Visual Studio Nástroje kontejneru s ASP.NET Core

Visual Studio 2017 a novější verze podporují vytváření, ladění a spouštění kontejnerových ASP.NET Core aplikací cílících na rozhraní .net Core. jsou podporovány kontejnery Windows i Linux.

Zobrazit nebo stáhnout ukázkový kód (Jak stáhnout)

Požadavky

Instalace a nastavení

v případě instalace docker si nejdříve přečtěte informace v části Docker for Windows: co potřebujete znát před instalacínástroje. Dále nainstalujte Docker pro Windows.

sdílené jednotky v Docker for Windows musí být nakonfigurovány tak, aby podporovaly mapování svazků a ladění. klikněte pravým tlačítkem myši na ikonu docker panelu systému, vyberte Nastavení a vyberte sdílené jednotky. Vyberte jednotku, kde Docker ukládá soubory. Klikněte na Použít.

Dialog pro výběr místního sdílení jednotky C pro kontejnery

Tip

Visual Studio 2017 verze 15,6 a později se zobrazí výzva, když nejsou nakonfigurovány sdílené jednotky .

Přidání projektu do kontejneru Docker

aby bylo možné projekt ASP.NET Core kontejnerizace, musí projekt cílit na .net Core. jsou podporovány kontejnery Linux i Windows.

při přidávání podpory docker do projektu vyberte buď Windows, nebo kontejner Linux. Hostitel Docker musí používat stejný typ kontejneru. chcete-li změnit typ kontejneru v běžící instanci docker, klikněte pravým tlačítkem myši na ikonu docker panelu systému a vyberte možnost přepnout na Windows kontejnery... nebo přepnout na kontejnery platformy Linux....

Nová aplikace

při vytváření nové aplikace pomocí šablon projektů ASP.NET Core webové aplikace zaškrtněte políčko povolit podporu docker :

Zaškrtávací políčko Povolit podporu Docker

Pokud je cílová architektura rozhraní .NET Core, rozevírací seznam OS umožňuje výběr typu kontejneru.

Existující aplikace

pro ASP.NET Core projekty cílené na .net Core existují dvě možnosti, jak přidat podporu docker prostřednictvím nástrojů. otevřete projekt v Visual Studio a vyberte jednu z následujících možností:

  • v nabídce Project vyberte možnost podpora docker .
  • Klikněte pravým tlačítkem na projekt v Průzkumník řešení a vyberte Přidat > podporu Docker.

nástroje Visual Studio Container Tools nepodporují přidávání docker do existujícího projektu ASP.NET Core cílení na .NET Framework.

Souboru Dockerfile – přehled

Do kořenového adresáře projektu se přidá recept pro vytvoření finální image Docker souboru Dockerfile. Porozumění příkazům, které jsou v něm, najdete v referenčních informacích k souboru Dockerfile . Tento konkrétní souboru Dockerfile používá sestavení s více fázemi 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í souboru Dockerfile je založen na obrázku Microsoft/dotNET . tato základní image zahrnuje ASP.NET Core runtime a NuGet balíčky. Balíčky jsou kompilovány JIT (just-in-time), aby se zlepšil výkon při spuštění.

Když je zaškrtnuté políčko Konfigurovat pro protokol HTTPS v dialogovém okně Nový projekt, souboru Dockerfile zpřístupňuje dva porty. Pro přenosy HTTP se používá jeden port; druhý port se používá pro protokol HTTPS. Pokud políčko není zaškrtnuté, bude pro přenosy HTTP vystaven 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í souboru Dockerfile vychází z image Microsoft/aspnetcore . tato základní image obsahuje balíčky ASP.NET Core NuGet, které jsou kompilovány jit (just-in-time) pro zlepšení výkonu při spuštění.

Přidat do aplikace podporu nástroje Orchestrator pro kontejner

jako jediné řešení orchestrace kontejnerů Docker Compose Visual Studio 2017 verze 15,7 nebo starší. Artefakty Docker Compose se přidávají prostřednictvím Přidat > podporu Docker.

Visual Studio 2017 verze 15,8 nebo novější přidat řešení orchestrace pouze v případě, že je pokyn. Klikněte pravým tlačítkem na projekt v Průzkumník řešení a vyberte Přidat > kontejner Orchestrator support. K dispozici jsou následující možnosti:

Docker Compose

nástroje pro Visual Studio kontejnerů přidají do řešení projekt docker- resolution s následujícími soubory:

  • Docker-tváře. dcproj: soubor představující projekt. Obsahuje <DockerTargetOS> element určující operační systém, který se má použít.
  • . dockerignore: vypíše vzor souborů a adresářů, které mají být vyloučeny při generování kontextu sestavení.
  • Docker-Compose. yml: základní Docker Compose soubor, který slouží k definování kolekce imagí sestavených a spuštěných s docker-compose build a v docker-compose run uvedeném pořadí.
  • Docker-Compose. override. yml: volitelný soubor, který čte Docker Compose, s přepsáním konfigurace pro služby. Visual Studio docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml" se spustí pro sloučení těchto souborů.

Soubor Docker-Compose. yml odkazuje na název bitové kopie, která je vytvořena 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 image: hellodockertools vygeneruje obrázek, hellodockertools:dev když aplikace běží v režimu ladění . hellodockertools:latestObrázek se vygeneruje, když aplikace běží v režimu vydání .

Pokud je image vložená do registru, zadejte předponu názvu image k uživatelskému jménu Docker (například dockerhubusername/hellodockertools ). Případně změňte název bitové kopie 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 vydaná verze), přidejte soubory Docker-skládání 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ěny do stejného umístění jako soubor Docker-Compose-override. yml .

Pomocí souborů přepsání specifických pro konfiguraci můžete pro konfigurace ladění a vydání zadat různá nastavení konfigurace (například proměnné prostředí nebo vstupní body).

chcete-li Docker Compose zobrazit možnost spuštění v Visual Studio, musí být projekt docker spouštěn jako projekt po spuštění.

Service Fabric

kromě základních požadavkůřešení orchestrace Service Fabric vyžaduje následující požadavky:

Service Fabric nepodporuje spouštění kontejnerů Linux v místním vývojovém clusteru v Windows. pokud projekt již používá kontejner Linux, Visual Studio vyzve k přepnutí do Windowsch kontejnerů.

nástroje pro Visual Studio kontejnerů proveďte následující úlohy:

  • přidá do řešení projekt aplikace < project_name > aplikace Service Fabric .

  • přidá do projektu ASP.NET Core soubor s příponou souboru dockerfile a . dockerignore . pokud souboru dockerfile už v projektu ASP.NET Core existuje, přejmenuje se na souboru dockerfile. originál. Vytvoří se nový souboru Dockerfile, který bude vypadat přibližně takto:

    # 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"]
    
  • přidá <IsServiceFabricServiceProject> prvek do souboru . csproj ASP.NET Coreho projektu:

    <IsServiceFabricServiceProject>True</IsServiceFabricServiceProject>
    
  • přidá složku PackageRoot do projektu ASP.NET Core. Složka obsahuje manifest a nastavení služby 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í Docker okna výstup zobrazuje následující akce:

  • Byla získána značka 2,1-aspnetcore-runtime bitové kopie modulu runtime aplikace Microsoft/dotNET (Pokud ještě není v mezipaměti). Bitová kopie nainstaluje ASP.NET Core a moduly runtime .NET Core a přidružené knihovny. je optimalizovaná pro spouštění ASP.NET Corech aplikací v produkčním prostředí.
  • ASPNETCORE_ENVIRONMENTProměnná prostředí je nastavena na hodnotu Development v rámci kontejneru.
  • K dispozici jsou dva dynamicky přiřazené porty: jeden pro HTTP a jeden pro protokol HTTPS. Pomocí příkazu se dá zadat dotaz na port přiřazený k hostiteli localhost docker ps .
  • Aplikace se zkopíruje do kontejneru.
  • Výchozí prohlížeč se spustí s ladicím programem připojeným ke kontejneru pomocí dynamicky přiřazeného portu.

Výsledná image Docker aplikace je označená jako vývoj. Obrázek je založen na značce 2,1-aspnetcore-runtime základní image Microsoft/dotNET . spusťte docker images příkaz v okně konzoly Správce balíčků (PMC). Zobrazí se obrázky 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
  • Byla získána bitová kopie modulu runtime aplikace Microsoft/aspnetcore (Pokud ještě není v mezipaměti).
  • ASPNETCORE_ENVIRONMENTProměnná prostředí je nastavena na hodnotu Development v rámci kontejneru.
  • Port 80 je vystavený a mapovaný na dynamicky přiřazený port pro localhost. Port je určen hostitelem Docker a lze k němu zadat dotaz pomocí docker ps příkazu.
  • Aplikace se zkopíruje do kontejneru.
  • Výchozí prohlížeč se spustí s ladicím programem připojeným ke kontejneru pomocí dynamicky přiřazeného portu.

Výsledná image Docker aplikace je označená jako vývoj. Obrázek je založen na základní imagi Microsoft/aspnetcore . spusťte docker images příkaz v okně konzoly Správce balíčků (PMC). Zobrazí se obrázky 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

K vývojové imagi chybí obsah aplikace, protože konfigurace ladění používá k zajištění iteračního prostředí připojení svazku. Pokud chcete odeslat image, použijte konfiguraci vydané verze .

Spusťte docker ps příkaz v PMC. Všimněte si, že aplikace je spuštěná 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í, aniž by bylo nutné krok kompilace. Pro zobrazení aktualizace proveďte změnu, uložte a aktualizujte prohlížeč.

Změny souborů kódu vyžadují kompilaci a restart Kestrel v rámci kontejneru. Po provedení změny použijte CTRL+F5 k provedení procesu a spustí aplikaci v rámci kontejneru. Kontejner Docker není znovu sestaven ani zastaven. Spusťte docker ps příkaz v PMC. Všimněte si, že původní kontejner pořád 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í Docker

po dokončení cyklu vývoj a ladění aplikace Visual Studio kontejnerové nástroje pomáhají při vytváření produkčních imagí aplikace. Změňte rozevírací seznam konfigurace na vydaná a sestavte aplikaci. Nástroj získá obrázek kompilace/publikování z Docker Hub (Pokud ještě není v mezipaměti). Obrázek se vytvoří s nejnovější značkou, která se dá vložit do privátního registru nebo Dock centra.

Pokud docker images chcete zobrazit seznam imagí, spusťte příkaz v PMC. 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-buildImage a microsoft/aspnetcore uvedené v předchozím výstupu se nahrazují microsoft/dotnet obrázky od .NET Core 2,1. Další informace najdete v tématu oznámení o migraci úložiště Docker.

Poznámka

docker imagesPříkaz vrátí zprostředkující image s názvy a značkami úložiště, které jsou označeny jako <none> (nejsou uvedeny výše). Tyto nepojmenované image jsou vytvářeny pomocí souboru Dockerfile sestavení s více fázemi . Zlepšují efektivitu vytváření finálního obrázku. při změně dojde k jejich opětovnému vytvoření — pouze nezbytných vrstev. Když už nepotřebujete zprostředkující image, odstraňte je pomocí příkazu Docker RMI .

Mohlo by se stát, že se v porovnání s vývojovou imagí bude zmenšovat velikost produkčního nebo produkčního obrazu. Z důvodu mapování svazků ladicí program a aplikace byly spuštěny z místního počítače, nikoli v rámci kontejneru. Nejnovější image zabalí potřebný kód aplikace ke spuštění aplikace na hostitelském počítači. Proto rozdíl je velikost kódu aplikace.

Další zdroje informací