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/sdkUká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/sdkUká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/aspnetUká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 runspuštění aplikace. Dynamická kompilace kódu není v modelu Dockeru nutná.
dotnet/core/aspnetUká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 runspuštění aplikace. Dynamická kompilace kódu není v modelu Dockeru nutná.
Požadavky
Stažení ukázkové aplikace
Stáhněte si ukázku naklonováním úložiště .NET Docker:
git clone https://github.com/dotnet/dotnet-docker
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 runV
http://localhost:5000prohlíž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 aspnetappArgumenty
buildpří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:5000prohlížeči přejděte na a otestujte aplikaci.
Spuštění v kontejneru Windows kontejneru
- V klientovi Dockeru přepněte na Windows kontejnery.
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 aspnetappPro Windows kontejnerů potřebujete IP adresu kontejneru (procházení
http://localhost:5000na nebude fungovat):Otevřete další příkazový řádek.
Spuštěním
docker pszobrazíte spuštěné kontejnery. Ověřte, že je aspnetcore_sample kontejner "aspnetcore_sample".Spuštěním
docker exec aspnetcore_sample ipconfigzobrazí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 publishedArgumenty 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.dllLinux:
dotnet published/aspnetapp.dll
Přejděte na
http://localhost:5000a 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í
- Příkaz docker build
- Příkaz Docker run
- ASP.NET Core Dockeru (ten použitý v tomto kurzu).)
- Konfigurace ASP.NET Core pro práci s proxy servery a nástroji pro vyrovnávání zatížení
- Práce s Visual Studio Docker Tools
- Ladění pomocí Visual Studio Code
- Uvolňování paměti s využitím Dockeru a malých kontejnerů
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: