Présentation de .NET et Docker
Les conteneurs constituent l’une des méthodes les plus populaires pour le déploiement et l’hébergement d’applications cloud, avec des outils tels que Docker, Kuberneteset Podman. De nombreux développeurs choisissent des conteneurs, car il est simple de empaqueter une application avec ses dépendances et d’obtenir cette application pour s’exécuter de manière fiable sur n’importe quel hôte de conteneur. Il existe une prise en charge étendue pour avec .NET et des conteneurs.
Docker fournit une vue d’ensemble des conteneurs. Docker Desktop : Community Edition est un bon outil à utiliser pour utiliser des conteneurs sur une machine de bureau pour développeurs.
Images .NET
Les images conteneur .NET officielles sont publiées dans le
Les images .NET sont régulièrement mises à jour chaque fois qu’un nouveau correctif .NET est publié ou lorsqu’une image de base du système d’exploitation est mise à jour.
Les images conteneur ciselées sont des images conteneur Ubuntu avec un ensemble minimal de composants requis par le runtime .NET. Ces images sont environ 100 Mo plus petites que les images Ubuntu standard et ont moins de CVEs car elles ont moins de composants. En particulier, ils ne contiennent pas d’interpréteur de commandes ou de gestionnaire de package, ce qui améliore considérablement leur profil de sécurité. Ils incluent également un utilisateur non-root et sont configurés avec cet utilisateur activé.
Génération d’images conteneur
Vous pouvez créer une image conteneur avec un fichier Dockerfile ou vous appuyer sur le kit de développement logiciel (SDK) .NET pour produire une image. Pour obtenir des exemples sur la création d’images, consultez dotnet/dotnet-docker et dotnet/sdk-container-builds.
L’exemple suivant illustre la génération et l’exécution d’une image conteneur en quelques étapes rapides (pris en charge avec .NET 8 et .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
est une nouvelle option pour les développeurs souhaitant utiliser des fichiers Dockerfiles.
Ports
Le mappage de ports est une partie clé de l’utilisation de conteneurs. Les ports doivent être publiés en dehors du conteneur pour répondre aux demandes web externes. Les images conteneur ASP.NET Core ont été modifiées dans .NET 8 pour écouter sur le port 8080
par défaut. .NET 6 et 7 écoutent sur le port 80
.
Dans l’exemple précédent avec docker run
, le port hôte 8000
est mappé au port de conteneur 8080
. Kubernetes fonctionne de la même façon.
Les variables d’environnement ASPNETCORE_HTTP_PORTS
, ASPNETCORE_HTTPS_PORTS
et ASPNETCORE_URLS
peuvent être utilisées pour configurer ce comportement.
Utilisateurs
À compter de .NET 8, toutes les images incluent un utilisateur non racine appelé app
. Par défaut, les images cselées sont configurées avec cet utilisateur activé. L’application de publication en tant que fonctionnalité de conteneur .NET (illustrée dans la section Génération d’images conteneur) configure également les images avec cet utilisateur activé par défaut. Dans tous les autres scénarios, l’utilisateur app
peut être défini manuellement, par exemple avec l’instruction USER
Dockerfile. Si une image a été configurée avec app
et les commandes doivent s’exécuter en tant que root
, l’instruction USER
peut être utilisée pour définir l’utilisateur sur root
.
Rester informé
Les actualités relatives aux conteneurs sont publiées dans discussions dotnet/dotnet-docker et dans la catégorie « conteneurs » du blog .NET .
Services Azure
Différents services Azure prennent en charge les conteneurs. Vous créez une image Docker pour votre application et la déployez sur l’un des services suivants :
Azure Kubernetes Service (AKS)
Mettre à l’échelle et orchestrer des conteneurs Windows & Linux à l’aide de Kubernetes.Service d'Applications Azure
Déployez des applications web ou des API à l’aide de conteneurs dans un environnement PaaS.Azure Container Apps
Exécutez vos charges de travail de conteneur sans gérer les serveurs, l’orchestration ou l’infrastructure, et tirez parti de la prise en charge native de Dapr et KEDA pour l’observabilité et la mise à l’échelle vers zéro.Azure Container Instances
Créez des conteneurs individuels dans le cloud sans aucun service de gestion de niveau supérieur.Azure Batch
Exécutez des travaux de calcul répétitifs à l’aide de conteneurs.Azure Service Fabric
Migrer et moderniser des applications .NET vers des microservices en utilisant des conteneurs Windows & Linux.Azure Container Registry
Stockez et gérez des images conteneur sur tous les types de déploiements Azure.