Déployer des applications .NET existantes en tant que conteneurs Windows

les déploiements basés sur des conteneurs Windows sont applicables aux applications Cloud-Optimized et aux applications Cloud-Native.

toutefois, dans ce guide, et en particulier dans les sections suivantes, il se concentre principalement sur l’utilisation des conteneurs Windows pour les applications optimisées pour le Cloud où vous n’avez pas besoin de remanier votre application.

Que sont les conteneurs ? (Linux ou Windows)

Les conteneurs sont un moyen d’encapsuler une application dans son propre package isolé. Dans son conteneur, l’application n’est pas affectée par les applications ou les processus qui existent en dehors du conteneur. Tout ce dont dépend l’application pour s’exécuter correctement en tant que processus se trouve à l’intérieur du conteneur. Partout où le conteneur peut se déplacer, les exigences de l’application sont toujours respectées, en termes de dépendances directes, car elles sont regroupées avec tout ce dont elles ont besoin pour s’exécuter (dépendances de bibliothèque, runtimes, etc.).

La caractéristique principale d’un conteneur est qu’il rend l’environnement identique dans différents déploiements, car le conteneur lui-même est associé à toutes les dépendances dont il a besoin. Vous pouvez déboguer l’application sur votre ordinateur, puis la déployer sur un autre ordinateur, avec le même environnement garanti.

Un conteneur est une instance d’une image de conteneur. Une image de conteneur est un moyen d’empaqueter une application ou un service (par exemple, un instantané), puis de la déployer de manière fiable et reproductible. Vous pouvez affirmer que Dockr n’est pas seulement une technologie. il s’agit également d’une philosophie et d’un processus.

À mesure que les conteneurs sont plus courants, ils deviennent une unité de déploiement à l’ensemble du secteur.

Avantages des conteneurs (moteur d’ancrage sur Linux ou Windows)

La création d’applications à l’aide de conteneurs, qui peuvent également être définies en tant que blocs de construction légers, offre une augmentation significative de l’agilité pour la création, l’expédition et l’exécution d’applications, dans toute l’infrastructure.

Avec les conteneurs, vous pouvez faire passer n’importe quelle application du développement à la production avec peu ou pas de modifications de code, grâce à l’intégration de l’ancrer sur les outils de développement Microsoft, les systèmes d’exploitation et le Cloud.

lorsque vous déployez sur des machines virtuelles ordinaires, vous avez probablement déjà une méthode en place pour déployer des applications ASP.NET sur vos machines virtuelles. Toutefois, il est probable que votre méthode implique plusieurs étapes manuelles ou des processus automatisés complexes à l’aide d’un outil de déploiement tel que marionnette ou d’un outil similaire. Vous devrez peut-être effectuer des tâches telles que la modification des éléments de configuration, la copie du contenu de l’application entre les serveurs et l’exécution de programmes d’installation interactifs basés sur des .msi des configurations, puis le test. Toutes les étapes du déploiement ajoutent du temps et des risques aux déploiements. Vous obtiendrez des erreurs chaque fois qu’une dépendance n’est pas présente dans l’environnement cible.

dans Windows conteneurs, le processus de packaging des applications est entièrement automatisé. les conteneurs Windows sont basés sur la plateforme de la station d’accueil, qui offre des mises à jour et des restaurations automatiques pour les déploiements de conteneurs. L’amélioration principale que vous pouvez effectuer à l’aide du moteur de l’ancrage est que vous créez des images, comme des instantanés de votre application, avec toutes ses dépendances. les images sont des images d’ancrage (une image de conteneur Windows, dans le cas présent). les images s’exécutent ASP.NET applications dans des conteneurs, sans revenir au code source. L’instantané de conteneur devient l’unité de déploiement.

De nombreuses organisations déposent des applications monolithiques existantes pour les raisons suivantes :

  • Flexibilité des versions grâce à un déploiement amélioré. Les conteneurs offrent un contrat de déploiement cohérent entre le développement et les opérations. Lorsque vous utilisez des conteneurs, vous n’entendez pas les développeurs dire « ça marche sur mon ordinateur, pourquoi ne pas en production ? » Par exemple, « il s’exécute en tant que conteneur, il s’exécutera donc en production ». L’application empaquetée, avec toutes ses dépendances, peut être exécutée dans n’importe quel environnement de conteneur pris en charge. Il s’exécutera comme prévu pour s’exécuter dans toutes les cibles de déploiement (dev, QA, staging, production). Les conteneurs éliminent la plupart des frottements lorsqu’ils passent d’une étape à l’autre, ce qui améliore considérablement le déploiement, et vous pouvez les expédier plus rapidement.

  • Réduction des coûts. Les conteneurs entraînent des coûts réduits, que ce soit par la consolidation et la suppression du matériel existant ou par l’exécution d’applications à une densité plus élevée par unité de matériel.

  • Portabilité : Les conteneurs sont modulaires et portables. les conteneurs d’ancrage sont pris en charge sur n’importe quel système d’exploitation serveur (Linux et Windows), dans n’importe quel cloud public principal (Microsoft Azure, Amazon AWS, Google, IBM) et dans des environnements cloud locaux et privés ou hybrides.

  • Contrôle. Les conteneurs offrent un environnement flexible et sécurisé, contrôlé au niveau du conteneur. Un conteneur peut être sécurisé, isolé et même limité en définissant des stratégies de contrainte d’exécution sur le conteneur. comme indiqué dans la section sur les conteneurs Windows, Windows Server 2016 et les conteneurs Hyper-V offrent des options de support d’entreprise supplémentaires.

Des améliorations significatives de l’agilité, de la portabilité et du contrôle conduisent à des réductions de coûts significatives lorsque vous utilisez des conteneurs pour développer et gérer des applications.

Qu’est-ce que Docker ?

Dockr est un projet open source qui automatise le déploiement d’applications en tant que conteneurs portables et autonomes qui peuvent s’exécuter dans le Cloud ou localement. Docker est également le nom de la société qui développe et diffuse cette technologie. l’entreprise travaille en collaboration avec les fournisseurs cloud, Linux et Windows, y compris Microsoft.

Diagramme montrant comment l’arrimeur déploie les conteneurs dans le Cloud hybride.

Figure 4-6. Docker déploie des conteneurs dans toutes les couches du cloud hybride

Pour une personne connaissant les machines virtuelles, les conteneurs peuvent paraître remarquablement similaires. Un conteneur exécute un système d’exploitation, a un système de fichiers et est accessible sur un réseau, tout comme un système informatique physique ou virtuel. Ceci dit, la technologie et les concepts derrière les conteneurs sont très différents de ceux des machines virtuelles. Du point de vue du développeur, un conteneur doit être traité plus comme un processus unique. En fait, un conteneur a un seul point d’entrée pour un processus.

Les conteneurs d’ancrage (par souci de simplicité, conteneurs) peuvent s’exécuter en mode natif sur Linux et Windows. lors de l’exécution de conteneurs standard, Windows conteneurs peuvent s’exécuter uniquement sur des hôtes Windows (un serveur hôte ou une machine virtuelle), et les conteneurs linux ne peuvent s’exécuter que sur des hôtes linux. toutefois, dans les versions récentes de Windows server et des conteneurs Hyper-v, un conteneur Linux peut également s’exécuter en mode natif sur Windows Server à l’aide de la technologie d’isolation Hyper-v qui est actuellement disponible uniquement dans les conteneurs Windows Server.

dans un avenir proche, les environnements mixtes qui ont à la fois des conteneurs Linux et Windows seront possibles et même communs.

avantages des conteneurs Windows pour vos applications .net existantes

les avantages de l’utilisation de Windows conteneurs sont fondamentalement les mêmes avantages que ceux que vous pouvez obtenir des conteneurs en général. l’utilisation de Windows conteneurs est une amélioration considérable de l’agilité, de la portabilité et du contrôle.

Les applications .NET existantes font référence aux applications qui ont été créées à l’aide de l' .NET Framework. par exemple, ils peuvent être traditionnels ASP.NET les applications web. ils n’utilisent pas .net Core ou .net 5 +, qui est plus récent et exécute des plateformes multiplateforme sur Linux, Windows et MacOS.

la dépendance principale dans le .NET Framework est Windows. Il a également des dépendances secondaires, comme IIS et System. Web dans les ASP.NET traditionnels.

une application .NET Framework doit s’exécuter sur Windows, point. si vous souhaitez créer un conteneur pour les applications de .NET Framework existantes et que vous ne souhaitez pas investir dans une migration vers .net Core ou version ultérieure (« si elle fonctionne correctement, ne la migrez pas »), le seul choix que vous avez pour les conteneurs est d’utiliser des conteneurs Windows.

par conséquent, l’un des principaux avantages des conteneurs Windows est qu’ils vous permettent de moderniser vos applications .NET Framework existantes qui s’exécutent sur des conteneurs Windows-through. enfin, Windows conteneurs vous offre les avantages que vous recherchez à l’aide de conteneurs-agilité, portabilité et meilleur contrôle.

Choisissez un système d’exploitation avec lequel cibler. Conteneurs basés sur le réseau

compte tenu de la diversité des systèmes d’exploitation pris en charge par l’arrimeur, ainsi que des différences entre .NET Framework et .net Core, vous devez cibler un système d’exploitation spécifique et des versions spécifiques en fonction de l’infrastructure que vous utilisez.

Pour Windows, vous pouvez utiliser Windows Server Core ou Windows Nano Server. ces versions de Windows fournissent des caractéristiques différentes (comme IIS ou un serveur web auto-hébergé comme Kestrel) qui peuvent être nécessaires pour les .NET Framework ou les applications .net.

Pour Linux, plusieurs distributions sont disponibles et prises en charge dans les images .NET Docker officielles (comme Debian).

La figure 4-7 montre les versions de système d’exploitation que vous pouvez cibler, en fonction de la version de l’application du .NET Framework.

diagramme montrant le système d’exploitation à cibler en fonction de la version de .NET Framework.

Figure 4-7. systèmes d’exploitation à cibler en fonction de la version de .NET Framework

dans les scénarios de migration des applications existantes ou héritées basées sur des applications .NET Framework, les dépendances principales se trouvent sur Windows et IIS. la seule option consiste à utiliser des images de l’arrimeur basées sur Windows Server Core et le .NET Framework.

lorsque vous ajoutez le nom de l’image à votre fichier fichier dockerfile, vous pouvez sélectionner le système d’exploitation et la version à l’aide d’une balise, comme dans les exemples suivants pour les images de conteneur de Windows basées sur .NET Framework :

Tag Système et version
mcr.microsoft.com/dotnet/framework/runtime:4.x-windowsservercore-20H2 .NET Framework 4. x sur Windows Server Core
mcr.microsoft.com/dotnet/framework/aspnet:4.x-windowsservercore-20H2 .NET Framework 4. x avec ASP.NET personnalisation supplémentaire, sur Windows Server Core

pour .net (multiplateforme pour Linux et Windows), les balises se présentent comme suit :

Tag Système et version
mcr.microsoft.com/dotnet/runtime:5.0 .NET Runtime uniquement sur Linux
mcr.microsoft.com/dotnet/runtime:5.0-nanoserver-20H2 runtime .net uniquement sur Windows Nano Server

Images multi-archi

Depuis 2017, la station d’accueil a bénéficié d’une fonctionnalité appelée images multi-arch . Les images de la station d’accueil .NET peuvent utiliser des balises multi-arch. Vos fichiers fichier dockerfile n’ont plus besoin de définir le système d’exploitation que vous ciblez. La fonctionnalité multi-arch permet l’utilisation d’une balise unique sur plusieurs configurations d’ordinateur. Par exemple, avec plusieurs archets, vous pouvez utiliser une balise commune : MCR.Microsoft.com/dotnet/Runtime :5.0. Si vous extrayez cette balise d’un environnement de conteneur Linux, vous bénéficiez de l’image Debian. si vous extrayez cette balise d’un environnement de conteneur Windows, vous récupérez l’image Nano Server.

pour les images .NET Framework, étant donné que le .NET Framework traditionnel ne prend en charge que les Windows, vous ne pouvez pas utiliser la fonctionnalité multi-arch.

types de conteneurs Windows

comme les conteneurs Linux, les conteneurs de serveur Windows sont gérés à l’aide du moteur de l’ancrage. contrairement aux conteneurs Linux, les conteneurs Windows incluent deux types de conteneurs différents ou des temps d’exécution, Windows des conteneurs de serveur et l’isolation Hyper-V.

conteneurs de serveur Windows: permet d’isoler les applications grâce à la technologie d’isolation des processus et des espaces de noms. un conteneur Windows Server partage un noyau avec l’hôte de conteneur et tous les conteneurs en cours d’exécution sur l’ordinateur hôte. Ces conteneurs ne créent pas de frontière de sécurité contre le code hostile et ne doivent pas être utilisés pour isoler du code non fiable. En raison de l’espace de noyau partagé, ces conteneurs requièrent la même version et configuration de noyau.

isolation Hyper-V: développe l’isolation fournie par les conteneurs Windows Server en exécutant chaque conteneur sur une machine virtuelle hautement optimisée. Dans cette configuration, le noyau de l’hôte de conteneur n’est pas partagé avec d’autres conteneurs exécutés sur l’hôte. Ces conteneurs sont conçus pour l’hébergement multi-locataire hostile, avec les mêmes garanties de sécurité qu’une machine virtuelle. Étant donné que ces conteneurs ne partagent pas le noyau avec l’hôte ou d’autres conteneurs sur l’hôte, ils peuvent exécuter des noyaux avec différentes versions et configurations (avec les versions prises en charge). par exemple, tous les conteneurs Windows sur Windows 10 utilisent l’isolation Hyper-V pour utiliser la version et la configuration du noyau du serveur Windows.

l’exécution d’un conteneur sur Windows avec ou sans l’isolation Hyper-V est une décision au moment de l’exécution. vous pouvez choisir de créer le conteneur avec l’isolation Hyper-V initialement et, au moment de l’exécution, choisir de l’exécuter en tant que conteneur Windows Server à la place.

Ressources supplémentaires

L’écosystème de conteneurs dans Azure

Dans les sections précédentes, nous avons expliqué les avantages des conteneurs de l’ancrage, ainsi que les détails sur les images de conteneur spécifiques pour les applications .NET. Toutes ces informations génériques sont fondamentales pour développer ou déconteneurr une application. toutefois, quand vous réfléchissez à l’environnement de déploiement de production ou même aux environnements aq et de développement/Test, Microsoft Azure offre une vaste gamme de choix, un écosystème de conteneurs complet dans le cloud (illustré dans le diagramme ci-dessous). En fonction des besoins spécifiques de votre application, vous devez choisir un ou un autre produit Azure.

Diagramme de l’écosystème de conteneurs dans Azure.

Figure 4-7.5. L’écosystème de conteneurs dans Azure

À partir de l’écosystème de conteneurs dans Azure, les produits suivants prennent en charge les conteneurs qui sont considérés comme des infrastructures :

  • Azure Container Instances (ACI)
  • Machines virtuelles Azure (avec prise en charge du conteneur)
  • Azure Virtual Machine Scale sets (avec prise en charge du conteneur)

À partir de ces trois, ACI offre un excellent avantage, ce qui est que vous n’avez pas besoin de gérer le système d’exploitation sous-jacent, vous n’avez pas besoin de mettre à niveau/correctif, etc. mais ACI est toujours positionné au niveau de l’infrastructure, comme expliqué dans les prochaines sections de ce document.

Les produits dans Azure prenant en charge les conteneurs qui sont en même temps positionnés plus dans le niveau PaaS (Platform as a service) sont les suivants :

  • Azure App Service
  • Service Azure Kubernetes (AKS et ACS)
  • Azure Batch

Azure Container Registry est ensuite un registre de conteneurs hautement évolutif, hébergé dans Azure, que vous pouvez utiliser à partir de tous les produits précédents lors de l’inscription et du déploiement de vos images de conteneur personnalisées.

en outre, à partir de vos conteneurs, vous pouvez utiliser d’autres services gérés dans azure comme Azure SQL Database, le cache redims azure, les Azure Cosmos DB, etc. de plus, il existe des solutions/plateformes tierces disponibles dans la place de marché Azure, comme Cloud Foundry et OpenShift, où vous pouvez également utiliser des conteneurs dans Azure.

dans les sections suivantes, vous pouvez explorer les recommandations de Microsoft concernant l’utilisation de chacun de ces produits et solutions Azure, spécifiquement lors du ciblage de Windows conteneurs.