Introduktion till .NET och Docker

Containrar är ett av de mest populära sätten att distribuera och hantera molnprogram med verktyg som Docker, Kubernetes och Podman. Många utvecklare väljer containrar eftersom det är enkelt att paketera en app med dess beroenden och få appen att köras på ett tillförlitligt sätt på alla containervärdar. Det finns omfattande stöd för att använda .NET med containrar.

Docker ger en bra översikt över containrar. Docker Desktop: Community Edition är ett bra verktyg att använda för att använda containrar på utvecklarens skrivbordsdator.

.NET-avbildningar

Officiella .NET-containeravbildningar publiceras till Microsofts artefaktregister och kan identifieras på Docker Hub. Det finns körningsavbildningar för produktion och SDK-avbildningar för att skapa din kod, för Linux (Alpine, Debian, Ubuntu, Mariner) och Windows. Mer information finns i .NET-containeravbildningar.

.NET-avbildningar uppdateras regelbundet när en ny .NET-korrigering publiceras eller när en operativsystembasavbildning uppdateras.

Mejslade containeravbildningar är Ubuntu-containeravbildningar med en minimal uppsättning komponenter som krävs av .NET-körningen. Dessa avbildningar är ~100 MB mindre än vanliga Ubuntu-avbildningar och har färre CVE:er eftersom de har färre komponenter. I synnerhet innehåller de inte ett gränssnitt eller en pakethanterare, vilket avsevärt förbättrar deras säkerhetsprofil. De innehåller även en icke-rotanvändare och konfigureras med den användaren aktiverad.

Skapa containeravbildningar

Du kan skapa en containeravbildning med en Dockerfile eller förlita dig på .NET SDK för att skapa en avbildning. Exempel på hur du skapar avbildningar finns i dotnet/dotnet-docker och dotnet/sdk-container-builds.

I följande exempel visas hur du skapar och kör en containeravbildning i några få snabbsteg (stöds med .NET 8 och .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 är ett nytt alternativ för utvecklare som vill använda Dockerfiles.

Hamnar

Portmappning är en viktig del av användningen av containrar. Portar måste publiceras utanför containern för att kunna svara på externa webbbegäranden. ASP.NET Core-containeravbildningar har ändrats i .NET 8 för att lyssna på port 8080, som standard. .NET 6 och 7 lyssnar på port 80.

I föregående exempel med docker runmappas värdporten 8000 till containerporten 8080. Kubernetes fungerar på ett liknande sätt.

Miljövariablerna ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTSoch ASPNETCORE_URLS kan användas för att konfigurera det här beteendet.

Användare

Från och med .NET 8 innehåller alla bilder en icke-rotanvändare med namnet app. Som standard konfigureras mejslade bilder med den här användaren aktiverad. Publiceringsappen som .NET-containerfunktionen (visas i avsnittet Skapa containeravbildningar ) konfigurerar också avbildningar med den här användaren aktiverad som standard. I alla andra scenarier app kan användaren ställas in manuellt, till exempel med Dockerfile-instruktionenUSER. Om en avbildning har konfigurerats med app och kommandon måste köras som rootkan instruktionen USER användas för att ställa in användaren på root.

Håll dig informerad

Containerrelaterade nyheter publiceras i diskussioner med dotnet/dotnet-docker och till kategorin .NET Blog "containers".

Azure-tjänster

Olika Azure-tjänster stöder containrar. Du skapar en Docker-avbildning för ditt program och distribuerar den till någon av följande tjänster:

  • Azure Kubernetes Service (AKS)
    Skala och orkestrera Windows- och Linux-containrar med Kubernetes.

  • Azure App Service
    Distribuera webbappar eller API:er med containrar i en PaaS-miljö.

  • Azure Container Apps
    Kör dina containerarbetsbelastningar utan att hantera servrar, orkestrering eller infrastruktur och utnyttja internt stöd för Dapr och KEDA för observerbarhet och skalning till noll.

  • Azure Container Instances
    Skapa enskilda containrar i molnet utan hanteringstjänster på högre nivå.

  • Azure Batch
    Kör repetitiva beräkningsjobb med containrar.

  • Azure Service Fabric
    Lyfta, flytta och modernisera .NET-program till mikrotjänster med hjälp av Windows- och Linux-containrar.

  • Azure Container Registry
    Lagra och hantera containeravbildningar för alla typer av Azure-distributioner.

Nästa steg