Introduktion till .NET och Docker
Containrar är ett av de mest populära sätten att distribuera och vara värd för molnprogram, med verktyg som Docker, Kubernetesoch 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 med .NET med containrar.
Docker ger en bra översikt av 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öravbildningar för produktion och SDK-avbildningar för att bygga 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 de vanliga Ubuntu-avbildningarna 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 också en icke-rotanvändare och konfigureras med den användaren aktiverad.
Skapa containeravbildningar
Du kan bygga en containeravbildning med en Dockerfil eller använda .NET SDK för att skapa en containeravbildning. 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.
Portar
Portmappning är en nyckeldel i att använda containrar. Portar måste publiceras utanför containern för att kunna svara på externa webbbegäranden. ASP.NET Core-containeravbildningar ändrades i .NET 8 för att som standardinställning lyssna på port 8080
. .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 som heter app
. Som standard konfigureras mejslade bilder med den här användaren aktiverad. Publiceringsapp som .NET-containerfunktion (visas i avsnittet Skapa containeravbildningar) konfigurerar även avbildningar med den här användaren aktiverad som standard. I alla andra scenarier kan app
användare anges manuellt, till exempel med instruktionen USER
Dockerfile. 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 till root
.
Håll dig informerad
Containerrelaterade nyheter publiceras i dotnet/dotnet-docker-diskussioner och i .NET Bloggens kategori "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 & 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 inbyggt 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 & Linux-containrar.Azure Containerregister
Lagra och hantera containeravbildningar i alla typer av Azure-distributioner.