Image Dockeru pro ASP.NET Core

Tento kurz ukazuje, jak spustit aplikaci ASP.NET Core v kontejnerech Dockeru.

V tomto kurzu jste:

  • Další informace o ASP.NET Core imagí Dockeru
  • Stažení ukázkové ASP.NET Core aplikace
  • Místní spuštění ukázkové aplikace
  • Spuštění ukázkové aplikace v kontejnerech Linuxu
  • Spuštění ukázkové aplikace v Windows kontejnerech
  • Ruční sestavení a nasazení

ASP.NET Core Image Dockeru

Pro tento kurz si stáhnete ukázkovou ASP.NET Core a spustíte ji v kontejnerech Dockeru. Ukázka funguje s linuxovou i Windows kontejnery.

Ukázkový soubor Dockerfile používá k sestavení a spuštění v různých kontejnerech funkci docker multi-stage buildu. Kontejnery sestavení a spuštění se vytvářejí z imagí, které poskytuje Docker Hub microsoftu:

  • dotnet/sdk

    Ukázka používá tento obrázek k sestavení aplikace. Image obsahuje sadu .NET SDK, která zahrnuje nástroje příkazového řádku (CLI). Image je optimalizovaná pro místní vývoj, ladění a testování částí. Kvůli nástrojům nainstalovaným pro vývoj a kompilaci je image poměrně velká.

  • dotnet/core/sdk

    Ukázka používá tento obrázek k sestavení aplikace. Image obsahuje soubor .NET Core SDK, který zahrnuje nástroje příkazového řádku (CLI). Image je optimalizovaná pro místní vývoj, ladění a testování částí. Kvůli nástrojům nainstalovaným pro vývoj a kompilaci je image poměrně velká.

  • dotnet/aspnet

    Ukázka používá tento obrázek ke spuštění aplikace. Image obsahuje modul runtime ASP.NET Core knihovny a je optimalizovaná pro spouštění aplikací v produkčním prostředí. Tato image je navržená pro rychlost nasazení a spouštění aplikací, takže je optimalizovaný výkon sítě z Registru Dockeru do hostitele Dockeru. Do kontejneru se zkopírují jenom binární soubory a obsah potřebný ke spuštění aplikace. Obsah je připravený ke spuštění, což umožňuje nejrychlejší čas od docker run spuštění aplikace. Dynamická kompilace kódu není v modelu Dockeru nutná.

  • dotnet/core/aspnet

    Ukázka používá tento obrázek ke spuštění aplikace. Image obsahuje modul runtime ASP.NET Core knihovny a je optimalizovaná pro spouštění aplikací v produkčním prostředí. Tato image je navržená pro rychlost nasazení a spouštění aplikací, takže je optimalizovaný výkon sítě z Registru Dockeru do hostitele Dockeru. Do kontejneru se zkopírují jenom binární soubory a obsah potřebný ke spuštění aplikace. Obsah je připravený ke spuštění, což umožňuje nejrychlejší čas od docker run spuštění aplikace. Dynamická kompilace kódu není v modelu Dockeru nutná.

Požadavky

Stažení ukázkové aplikace

Místní spuštění aplikace

  • Přejděte do složky projektu na adrese dotnet-docker/samples/aspnetapp/aspnetapp.

  • Spuštěním následujícího příkazu sestavte a spusťte aplikaci místně:

    dotnet run
    
  • V http://localhost:5000 prohlížeči přejděte na a otestujte aplikaci.

  • Stisknutím kombinace kláves Ctrl+C na příkazovém řádku aplikaci zastavte.

Spuštění v kontejneru Linuxu

  • V klientovi Dockeru přepněte na kontejnery Linuxu.

  • Přejděte do složky Dockerfile na adrese dotnet-docker/samples/aspnetapp.

  • Spuštěním následujících příkazů sestavte a spusťte ukázku v Dockeru:

    docker build -t aspnetapp .
    docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
    

    Argumenty build příkazu:

    • Pojmete image aspnetapp.
    • Vyhledejte soubor Dockerfile v aktuální složce (tečka na konci).

    Argumenty příkazu pro spuštění:

    • Přidělte pseudo-TTY a nechte ho otevřený, i když není připojený. (Stejný účinek jako --interactive --tty .)
    • Po ukončení kontejneru automaticky odeberte.
    • Namapovat port 5000 na místním počítači na port 80 v kontejneru.
    • Kontejner pojmete aspnetcore_sample.
    • Zadejte image aspnetapp.
  • V http://localhost:5000 prohlížeči přejděte na a otestujte aplikaci.

Spuštění v kontejneru Windows kontejneru

Přejděte do složky docker file na dotnet-docker/samples/aspnetapp adrese .

  • Spuštěním následujících příkazů sestavte a spusťte ukázku v Dockeru:

    docker build -t aspnetapp .
    docker run -it --rm --name aspnetcore_sample aspnetapp
    
  • Pro Windows kontejnerů potřebujete IP adresu kontejneru (procházení http://localhost:5000 na nebude fungovat):

    • Otevřete další příkazový řádek.

    • Spuštěním docker ps zobrazíte spuštěné kontejnery. Ověřte, že je aspnetcore_sample kontejner "aspnetcore_sample".

    • Spuštěním docker exec aspnetcore_sample ipconfig zobrazíte IP adresu kontejneru. Výstup příkazu vypadá jako v tomto příkladu:

      Ethernet adapter Ethernet:
      
         Connection-specific DNS Suffix  . : contoso.com
         Link-local IPv6 Address . . . . . : fe80::1967:6598:124:cfa3%4
         IPv4 Address. . . . . . . . . . . : 172.29.245.43
         Subnet Mask . . . . . . . . . . . : 255.255.240.0
         Default Gateway . . . . . . . . . : 172.29.240.1
      
  • Zkopírujte adresu IPv4 kontejneru (například 172.29.245.43) a vložte ji do adresního řádku prohlížeče a otestujte aplikaci.

Ruční sestavení a nasazení

V některých scénářích můžete chtít nasadit aplikaci do kontejneru zkopírováním jejích prostředků potřebných za běhu. Tato část ukazuje, jak provést ruční nasazení.

  • Přejděte do složky projektu na adrese dotnet-docker/samples/aspnetapp/aspnetapp.

  • Spusťte dotnet publish příkaz:

    dotnet publish -c Release -o published
    

    Argumenty příkazu:

    • Sestavte aplikaci v režimu vydání (výchozí je režim ladění).
    • Vytvořte prostředky v publikované složce.
  • Spusťte aplikaci.

    • Windows:

      dotnet published\aspnetapp.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • Přejděte na http://localhost:5000 a podívejte se na domovskou stránku.

Pokud chcete použít ručně publikovanou aplikaci v kontejneru Dockeru, vytvořte nový soubor Dockerfile a pomocí příkazu docker build . sestavte image.

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY published/aspnetapp.dll ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Pokud chcete zobrazit novou image, použijte docker images příkaz .

Soubor Dockerfile

Tady je soubor Dockerfile používaný docker build příkazem, který jste spustili dříve. K sestavení a nasazení používá stejný způsob, jako jste to udělali v dotnet publish této části.

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

V předchozím souboru Dockerfile se soubory *.csproj zkopírují a obnoví jako různé vrstvy. Když docker build příkaz sestaví image, použije integrovanou mezipaměť. Pokud se soubory od posledního spuštění příkazu nezměnily, příkaz se nemusí *.csproj docker build spouštět dotnet restore znovu. Místo toho se znovu použije integrovaná mezipaměť pro dotnet restore odpovídající vrstvu. Další informace najdete v tématu Osvědčené postupy pro psaní souborů Dockerfile.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/aspnetapp.dll ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Soubor Dockerfile

Tady je soubor Dockerfile používaný docker build příkazem, který jste spustili dříve. K sestavení a nasazení používá stejný způsob, jako jste to udělali v dotnet publish této části.

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Jak je uvedené v předchozím souboru Dockerfile, soubory se zkopírují a *.csproj obnoví jako samostatné vrstvy. Když docker build příkaz sestaví image, použije integrovanou mezipaměť. Pokud se soubory od posledního spuštění příkazu nezměnily, příkaz se nemusí *.csproj docker build spouštět dotnet restore znovu. Místo toho se znovu použije integrovaná mezipaměť pro dotnet restore odpovídající vrstvu. Další informace najdete v tématu Osvědčené postupy pro psaní souborů Dockerfile.

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/aspnetapp.dll ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Soubor Dockerfile

Tady je soubor Dockerfile používaný docker build příkazem, který jste spustili dříve. K sestavení a nasazení používá stejný způsob, jako jste to udělali v dotnet publish této části.

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Další zdroje informací

Další kroky

Úložiště Git, které obsahuje ukázkovou aplikaci, obsahuje také dokumentaci. Přehled prostředků dostupných v úložišti najdete v souboru README. Konkrétně se naučíte implementovat HTTPS: