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 Microsoft Artifact Registry 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 run
mappas värdporten 8000
till containerporten 8080
. Kubernetes fungerar på ett liknande sätt.
Miljövariablerna ASPNETCORE_HTTP_PORTS
, ASPNETCORE_HTTPS_PORTS
och 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 root
kan 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.