Partager via


Nouveautés des conteneurs pour .NET 8

Cet article décrit les nouvelles fonctionnalités des conteneurs pour .NET 8.

Images de conteneur

Les modifications suivantes ont été apportées aux images conteneur .NET pour .NET 8 :

Utilisateur non-racine

Les images incluent un utilisateur non-root. Cet utilisateur rend les images compatibles avec non-root. Pour exécuter en tant que non-root, ajoutez la ligne suivante à la fin de votre fichier Dockerfile (ou une instruction similaire dans vos manifestes Kubernetes) :

USER app

.NET 8 ajoute une variable d’environnement pour l’UID de l’utilisateur non-root, qui est 64198. Cette variable d’environnement est utile pour le test runAsNonRoot Kubernetes, qui nécessite que l’utilisateur du conteneur soit défini via UID et non par nom. Ce dockerfile montre un exemple d’utilisation.

Le port par défaut est également passé du port 80 à 8080. Pour prendre en charge ce changement, une nouvelle variable d’environnement ASPNETCORE_HTTP_PORTS est disponible afin de faciliter le changement de port. La variable accepte une liste de ports, ce qui est plus simple que le format requis par ASPNETCORE_URLS. Si vous revenez au port 80 à l’aide de l’une de ces variables, vous ne pouvez pas exécuter en tant que non-root.

Pour plus d’informations, consultez Le port ASP.NET Core par défaut est passé de 80 à 8080 et Nouvel utilisateur « app » non-racine dans les images Linux.

Debian 12

Les images conteneur utilisent désormais Debian 12 (Bookworm). Debian est la distribution Linux par défaut dans les images conteneur .NET.

Pour plus d’informations, consultez Images conteneur Debian mises à niveau vers Debian 12.

Images Ubuntu ciselées

Les images Ubuntu ciselées sont disponibles pour .NET 8. Les images ciselées ont une surface d’attaque réduite, car elles sont ultra-petites, n’ont pas de gestionnaire de package ou d’interpréteur de commandes, et sont non-root. Ce type d’image est destiné aux développeurs qui souhaitent bénéficier de l’informatique de style appliance.

Par défaut, les images Chiseled ne prennent pas en charge la globalisation. Des images extra sont fournies, parmi lesquelles les packages icu et tzdata.

Pour plus d’informations sur la globalisation et les conteneurs, consultez Globalization Test App.

Créer des images conteneur multiplateformes

Docker prend en charge l’utilisation et la création d’images multiplateformes qui fonctionnent dans plusieurs environnements. .NET 8 introduit un nouveau modèle qui vous permet de combiner et de mettre en correspondance les architectures avec les images .NET que vous générez. Par exemple, si vous utilisez macOS et que vous souhaitez cibler un service cloud x64 dans Azure, vous pouvez générer l’image à l’aide du commutateur --platform comme suit :

docker build --pull -t app --platform linux/amd64

Le kit de développement logiciel (SDK) .NET prend désormais en charge les valeurs $TARGETARCH et l’argument -a lors de la restauration. L’extrait de code suivant affiche un exemple :

RUN dotnet restore -a $TARGETARCH

# Copy everything else and build app.
COPY aspnetapp/. .
RUN dotnet publish -a $TARGETARCH --self-contained false --no-restore -o /app

Pour plus d’informations, consultez le billet de blog Amélioration de la prise en charge des conteneurs multiplateformes.

Images composites ASP.NET

Dans le cadre d’un effort d’amélioration des performances de conteneurisation, de nouvelles images Docker ASP.NET sont disponibles avec une version composite du runtime. Ce composite est généré en compilant plusieurs assemblys MSIL dans un seul binaire de sortie prêt à l’exécution (R2R). Comme ces assemblys sont incorporés dans une seule image, le jitting prend moins de temps et les performances de démarrage des applications s’améliorent. L’autre grand avantage du composite par rapport à l’image ASP.NET standard est que les images composites occupent moins d’espace sur le disque.

Mais une mise en garde s’impose. Étant donné que les composites ont plusieurs assemblys incorporés dans un seul élément, ils offrent un couplage de versions plus limité. Les applications ne peuvent pas utiliser de versions personnalisées de l’infrastructure ou des fichiers binaires ASP.NET.

Les images composites sont disponibles pour les plateformes Alpine Linux, Ubuntu (« jammy ») Chiseled et Mariner Distroless à partir du référentiel mcr.microsoft.com/dotnet/aspnet. Les balises sont répertoriées avec le suffixe -composite sur la page Docker ASP.NET.

Publication de conteneurs

Valeurs par défaut de l’image générée

dotnet publish peut produire des images conteneur. Il produit par défaut des images non-root, ce qui permet à vos applications de rester sécurisées par défaut. Vous pouvez modifier cette valeur par défaut à tout moment en définissant la propriété ContainerUser, par exemple avec root.

La balise du conteneur de sortie par défaut est désormais latest. Cette valeur par défaut est conforme à d’autres outils dans l’espace des conteneurs et facilite l’utilisation des conteneurs dans les boucles de développement internes.

Performances et compatibilité

.NET 8 a des performances améliorées pour envoyer (push) des conteneurs vers des registres distants, en particulier les registres Azure. L’accélération provient de l’envoi de couches en une seule opération et, pour les registres qui ne prennent pas en charge les chargements atomiques, d’un mécanisme de segmentation plus fiable.

Ces améliorations signifient également que d’autres registres sont pris en charge : Harbor, Artifactory, Quay.io et Podman.

Authentification

.NET 8 ajoute la prise en charge de l’authentification d’échange de jeton OAuth (identité managée Azure) lors de l’envoi de conteneurs à des registres. Cette prise en charge signifie que vous pouvez désormais envoyer (push) vers des registres comme Azure Container Registry sans erreur d’authentification. Les commandes suivantes montrent un exemple de flux de publication :

> az acr login -n <your registry name>
> dotnet publish -r linux-x64 -p PublishProfile=DefaultContainer

Pour plus d’informations sur le conteneurisation d’applications .NET, consultez Conteneuriser une application .NET avec dotnet publish.

Publier dans l’archive tar.gz

À compter de .NET 8, vous pouvez créer un conteneur directement en tant qu’archive tar.gz. Cette fonctionnalité est utile si votre workflow n’est pas simple et vous oblige, par exemple, à exécuter un outil d’analyse sur vos images avant de les envoyer (push). Une fois l’archive créée, vous pouvez la déplacer, l’analyser ou la charger dans une chaîne d’outils Docker locale.

Pour publier dans une archive, ajoutez la propriété ContainerArchiveOutputPath à votre commande dotnet publish, par exemple :

dotnet publish \
  -p PublishProfile=DefaultContainer \
  -p ContainerArchiveOutputPath=./images/sdk-container-demo.tar.gz

Vous pouvez spécifier un nom de dossier ou un chemin d’accès avec un nom de fichier spécifique.

Voir aussi