Úvod k .NET a Dockeru

Kontejnery jsou jedním z nejoblíbenějších způsobů nasazení a hostování cloudových aplikací s nástroji, jako jsou Docker, Kubernetes a Podman. Mnoho vývojářů volí kontejnery, protože je jednoduché zabalit aplikaci se závislostmi a získat ji tak, aby se spolehlivě spouštěla na jakémkoli hostiteli kontejneru. Existuje rozsáhlá podpora pro používání .NET s kontejnery.

Docker poskytuje skvělý přehled kontejnerů. Docker Desktop: Community Edition je vhodný nástroj pro použití kontejnerů na vývojářském stolním počítači.

Image .NET

Oficiální image kontejnerů .NET se publikují do Registr artefaktů Microsoft a jsou zjistitelné v Docker Hubu. Existují image modulu runtime pro produkční image a image sdk pro sestavení kódu pro Linux (Alpine, Debian, Ubuntu, Mariner) a Windows. Další informace najdete v tématu Image kontejneru .NET.

Bitové kopie .NET se pravidelně aktualizují vždy, když se publikuje nová oprava .NET nebo při aktualizaci základní image operačního systému.

Image kontejneru jsou image kontejnerů Ubuntu s minimální sadou komponent vyžadovaných modulem runtime .NET. Tyto image jsou ~100 MB menší než běžné image Ubuntu a mají méně CVE , protože mají méně komponent. Konkrétně neobsahují správce prostředí ani balíčků, což výrazně zlepšuje profil zabezpečení. Zahrnují také uživatele bez kořenového adresáře a jsou nakonfigurovány s povoleným uživatelem.

Vytváření imagí kontejneru

Image kontejneru můžete sestavit pomocí souboru Dockerfile nebo spoléhat na sadu .NET SDK k vytvoření image. Ukázky vytváření imagí najdete v tématu dotnet/dotnet-docker a dotnet/sdk-container-builds.

Následující příklad ukazuje sestavení a spuštění image kontejneru v několika rychlých krocích (podporováno v .NET 8 a .NET 7.0.300).

$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
  Determining projects to restore...
  All projects are up-to-date for restore.
  webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
  webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
  Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
  Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
    <p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID   IMAGE     COMMAND               CREATED              STATUS              PORTS                                       NAMES
7c7ad33409e5   webapp    "dotnet webapp.dll"   About a minute ago   Up About a minute   0.0.0.0:8000->8080/tcp, :::8000->8080/tcp   jovial_shtern
$ docker kill 7c7ad33409e5

docker init je nová možnost pro vývojáře, kteří chtějí používat soubory Dockerfile.

Porty

Mapování portů je klíčovou součástí používání kontejnerů. Porty musí být publikovány mimo kontejner, aby mohly reagovat na externí webové požadavky. ASP.NET image kontejneru Core se v .NET 8 změnily tak, aby ve výchozím nastavení naslouchaly na portu 8080. .NET 6 a 7 naslouchejte na portu 80.

V předchozím příkladu se docker runport 8000 hostitele mapuje na port 8080kontejneru . Kubernetes funguje podobným způsobem.

Proměnné ASPNETCORE_HTTP_PORTSprostředí a ASPNETCORE_URLS , ASPNETCORE_HTTPS_PORTSlze použít ke konfiguraci tohoto chování.

Uživatelé

Počínaje rozhraním .NET 8 zahrnují všechny image uživatele, který není root app. Ve výchozím nastavení jsou obrázky se chytáky nakonfigurované s povoleným tímto uživatelem. Aplikace publikování jako funkce kontejneru .NET (znázorněná v části Vytváření imagí kontejnerů) také ve výchozím nastavení konfiguruje image s tímto uživatelem, který je povolený. Ve všech ostatních scénářích app je možné uživatele nastavit ručně, například pomocí USERinstrukce Dockerfile . Pokud je image nakonfigurovaná tak app , aby příkazy byly spuštěny jako root, USER pak lze instrukce použít k nastavení uživatele na root.

Zůstaňte v obraze

Zprávy související s kontejnery se publikují do dotnet /dotnet-docker diskuzí a do kategorie "kontejnery" blogu .NET.

Služby Azure

Různé služby Azure podporují kontejnery. Vytvoříte pro svou aplikaci image Dockeru a nasadíte ji do jedné z následujících služeb:

  • Azure Kubernetes Service (AKS)
    Škálování a orchestrace kontejnerů Windows a Linuxu pomocí Kubernetes

  • Azure App Service
    Nasaďte webové aplikace nebo rozhraní API pomocí kontejnerů v prostředí PaaS.

  • Azure Container Apps
    Spusťte úlohy kontejnerů bez správy serverů, orchestrace nebo infrastruktury a využijte nativní podporu pro Dapr a KEDA pro pozorovatelnost a škálování na nulu.

  • Azure Container Instances
    Vytvářejte jednotlivé kontejnery v cloudu bez jakýchkoli služeb správy vyšší úrovně.

  • Azure Batch
    Spouštění opakujících se výpočetních úloh pomocí kontejnerů

  • Azure Service Fabric
    Lift, shift a modernizovat aplikace .NET na mikroslužby pomocí kontejnerů Windows a Linuxu

  • Azure Container Registry
    Ukládejte a spravujte image kontejnerů napříč všemi typy nasazení Azure.

Další kroky