Sdílet prostřednictvím


Kontejnerizace aplikace .NET Core

Platí pro: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016

Toto téma popisuje, jak zabalit existující ukázkovou aplikaci .NET pro nasazení jako kontejner Windows po nastavení prostředí, jak je popsáno v tématu Začínáme: Příprava Windows pro kontejnerya spuštění prvního kontejneru, jak je popsáno v tématu Spuštění prvního kontejneru Windows.

Budete také potřebovat systém správy zdrojového kódu Git nainstalovaný na vašem počítači. Pokud ho chcete nainstalovat, navštivte Git.

Klonování ukázkového kódu z GitHubu

Veškerý zdrojový kód ukázkového kontejneru se uchovává v Virtualization-Documentation úložišti Git ve složce s názvem windows-container-samples.

  1. Otevřete relaci PowerShellu a změňte adresáře do složky, do které chcete uložit toto úložiště. (Fungují i jiné typy oken příkazového řádku, ale naše ukázkové příkazy používají PowerShell.)

  2. Naklonujte úložiště do aktuálního pracovního adresáře:

    git clone https://github.com/MicrosoftDocs/Virtualization-Documentation.git
    
  3. Pomocí následujících příkazů přejděte do ukázkového adresáře v části Virtualization-Documentation\windows-container-samples\asp-net-getting-started a vytvořte soubor Dockerfile.

    souboru Dockerfile se podobá souboru pravidel – jedná se o seznam pokynů, které modulu kontejneru říkají, jak sestavit image kontejneru.

    # Navigate into the sample directory
    Set-Location -Path Virtualization-Documentation\windows-container-samples\asp-net-getting-started
    
    # Create the Dockerfile for our project
    New-Item -Name Dockerfile -ItemType file
    

Zápis souboru Dockerfile

Otevřete soubor Dockerfile, který jste právě vytvořili pomocí textového editoru, který se vám líbí, a přidejte následující obsah:

FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]

Pojďme si to rozebrat řádek po řádku a vysvětlit, co jednotlivý pokyn dělá.

FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app

První skupina řádků oznamuje, kterou základní image použijeme pro vytvoření našeho kontejneru na základě. Pokud místní systém tuto image ještě nemá, docker ji automaticky vyzkouší a načte. Součástí mcr.microsoft.com/dotnet/core/sdk:2.1 je nainstalovaná sada .NET Core 2.1 SDK, takže jde o úkol vytváření projektů ASP .NET Core, které cílí na verzi 2.1. Další instrukce změní pracovní adresář v našem kontejneru na /app, takže všechny příkazy následující po této instrukci se vykonají v tomto kontextu.

COPY *.csproj ./
RUN dotnet restore

Pokyny poté zkopírují soubory .csproj do adresáře /app kontejneru build-env. Po zkopírování tohoto souboru z něj bude .NET číst a poté načte všechny závislosti a nástroje potřebné pro náš projekt.

COPY . ./
RUN dotnet publish -c Release -o out

Jakmile rozhraní .NET přetáhne všechny závislosti do kontejneru build-env, další instrukce zkopíruje všechny zdrojové soubory projektu do kontejneru. Pak řekneme .NET, aby publikovala naši aplikaci s konfigurací vydané verze a určila výstupní cestu.

Kompilace by měla být úspěšná. Teď musíme sestavit konečnou image.

Spropitné

Tento rychlý průvodce sestaví projekt .NET Core ze zdroje. Při sestavování imagí kontejnerů je vhodné zahrnout pouze produkční datovou část a její závislosti v imagi kontejneru. Nechceme, aby sada .NET Core SDK byla součástí naší konečné image, protože potřebujeme jenom modul runtime .NET Core, takže soubor Dockerfile se zapíše tak, aby používal dočasný kontejner, který je zabalený se sadou SDK s názvem build-env k sestavení aplikace.

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]

Vzhledem k tomu, že je naše aplikace ASP.NET, specifikujeme obraz s tímto runtime. Potom zkopírujeme všechny soubory z výstupního adresáře dočasného kontejneru do konečného kontejneru. Nakonfigurujeme kontejner tak, aby běžel s novou aplikací jako vstupní bod při spuštění kontejneru.

Napsali jsme soubor dockerfile k provedení vícefázového sestavení. Při spuštění souboru dockerfile použije dočasný kontejner, build-env, se sadou .NET Core 2.1 SDK k sestavení ukázkové aplikace a následné zkopírování výstupních binárních souborů do jiného kontejneru obsahujícího pouze modul runtime .NET Core 2.1, abychom minimalizovali velikost konečného kontejneru.

Sestavení a spuštění aplikace

Po napsání Dockerfile můžeme nasměrovat Docker na naše Dockerfile a říct mu, aby sestavil a pak spustil náš image.

  1. V okně příkazového řádku přejděte do adresáře, ve kterém se nachází soubor dockerfile, a spusťte příkaz sestavení dockeru a sestavte kontejner ze souboru Dockerfile.

    docker build -t my-asp-app .
    
  2. Pokud chcete spustit nově vytvořený kontejner, spusťte příkaz docker run.

    docker run -d -p 5000:80 --name myapp my-asp-app
    

    Pojďme tento příkaz rozeseknout:

    • -d říká Dockeru, aby spustil kontejner odpojený, což znamená, že se ke konzole uvnitř kontejneru nepřipojila žádná konzola. Kontejner běží na pozadí.
    • -p 5000:80 říká Dockeru, aby namapoval port 5000 na hostiteli na port 80 v kontejneru. Každý kontejner získá svou vlastní IP adresu. ASP .NET ve výchozím nastavení naslouchá na portu 80. Mapování portů nám umožňuje přejít na IP adresu hostitele na mapovaném portu a Docker přesměruje veškerý provoz na cílový port uvnitř kontejneru.
    • --name myapp říká Dockeru, aby dal tomuto kontejneru pohodlný název, podle něhož se má dotazovat (nemusíte hledat ID kontejneru přiřazeného za běhu pomocí Dockeru).
    • my-asp-app je obraz, který chceme spustit v Dockeru. Toto je image kontejneru vytvořená jako vrchol procesu docker build.
  3. Otevřete webový prohlížeč a přejděte na http://localhost:5000 a zobrazte kontejnerizovanou aplikaci.

    ASP.NET základní webové stránky spuštěné z místního hostitele v kontejneru

Další kroky

  1. Dalším krokem je publikování kontejnerizované ASP.NET webové aplikace do privátního registru pomocí služby Azure Container Registry. To vám umožní nasadit ho ve vaší organizaci.

    Když se dostanete do části, kde nahrajete image kontejneru doregistru, zadejte název ASP.NET aplikace, kterou jste právě zabalili (my-asp-app), spolu s vaším registrem kontejneru (například: contoso-container-registry):

    docker tag my-asp-app contoso-container-registry.azurecr.io/my-asp-app:v1
    

    Další ukázky aplikací a jejich přidružené soubory Dockerfile najdete v dalších ukázek kontejnerů.

  2. Po publikování aplikace do registru kontejneru je dalším krokem nasazení aplikace do clusteru Kubernetes, který vytvoříte pomocí služby Azure Kubernetes Service.