Partage via


Nouveautés des conteneurs pour .NET 8

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

Images de conteneurs

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

Utilisateur non-root

Les images incluent un utilisateur non-root. Cet utilisateur rend les images compatibles avec non-root. Pour s’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 1654. Cette variable d’environnement est utile pour le test kubernetes runAsNonRoot, ce qui nécessite que l’utilisateur du conteneur soit défini via UID et non par nom. Cette dockerfile montre un exemple d’utilisation.

Le port par défaut est également passé du port 80 à 8080. Pour prendre en charge cette modification, une nouvelle variable d’environnement ASPNETCORE_HTTP_PORTS est disponible pour faciliter la modification des ports. La variable accepte une liste de ports, qui est plus simple que le format requis par ASPNETCORE_URLS. Si vous changez le port pour revenir au port 80 à l’aide de l’une de ces variables, vous ne pouvez pas utiliser non-root.

Pour plus d’informations, consultez Port par défaut ASP.NET Core modifié de 80 à 8080 et Nouvel utilisateur non-racine « application » 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 de 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.

Les images ciselées ne prennent pas en charge la mondialisation, par défaut. Les images extra sont fournies ; elles incluent les packages icu et tzdata.

Pour plus d'informations sur la mondialisation et les conteneurs, consultez Application de test de globalisation.

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 montre 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 CIL dans un fichier 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 de ASP.NET régulière est que les images composites ont une taille plus petite sur le disque.

Il y a une mise en garde à prendre conscience. Étant donné que les composites ont plusieurs assemblages intégrés en un seul, ils présentent un couplage de version plus étroit. Les applications ne peuvent pas utiliser des versions personnalisées de l’infrastructure ou des fichiers binaires ASP.NET.

Les images composites sont disponibles pour les plateformes Alpine Linux, Ubuntu (« jammy ») et Mariner Distroless du dépôt 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 de conteneur. Il produit par défaut des images non-root, ce qui permet à vos applications de rester sécurisées par défaut. Modifiez cette valeur par défaut à tout moment en définissant la propriété ContainerUser, par exemple avec root.

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

Performances et compatibilité

.NET 8 a amélioré les performances pour envoyer (push) des conteneurs vers des registres distants, en particulier des registres Azure. La rapidité s'explique par le transfert des couches en une seule opération, et pour les registres qui ne supportent pas les téléchargements atomiques, un mécanisme de découpage 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 jetons OAuth (Azure Managed Identity) lors de l’envoi de conteneurs à des registres. Cette prise en charge signifie que vous pouvez désormais pousser vers des registres tels que Azure Container Registry sans erreurs 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 Containerize a .NET app with dotnet publish.

Publier dans tar.gz archive

À compter de .NET 8, vous pouvez créer un conteneur directement en tant qu’archive tar.gz. Cette fonctionnalité est utile si votre flux de travail n’est pas simple et nécessite que vous, par exemple, exécutez 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