Blog

Containerize .NET pour Red Hat OpenShift: conteneurs Windows et .NET Framework – Bien monter son serveur

Le 22 avril 2021 , mis à jour le 4 septembre 2021 - 8 minutes de lecture

[bzkshopping keyword= »Minecraft » count= »8″ template= »grid »]

Containerize .NET pour Red Hat OpenShift: conteneurs Windows et .NET Framework

Les développeurs qui utilisent et ciblent Microsoft .NET Framework ne voient plus les étrangers lorsqu'il s'agit de développer des applications basées sur des conteneurs. Que vous portiez une application existante (comme un site Web exécutant IIS) ou que vous créiez un nouveau microservice ou quelque part entre les deux, il est désormais possible – grâce aux conteneurs Windows – de déployer des applications .NET Framework sur des clusters Kubernetes ou Red Hat The OpenShift. . Cet article explore la possibilité d'exécuter des applications .NET Framework dans des conteneurs Windows dans des clusters OpenShift.

Noter: Cet article fait partie d'une série qui présente trois façons de conteneuriser. NET sur Red Hat OpenShift. L'article précédent présentait les conteneurs Linux pour .NET Core.

Conteneurs Windows?

Une petite leçon d'histoire s'impose. Alors que les conteneurs Linux peuvent retracer l'origine jusqu'à chroot appel système créé en 1979 (Oui, vous avez bien lu: Nineteen seventy-nine), la première implémentation complète généralement reconnue des conteneurs Linux a commencé en 2008 avec LXC – LinuX Containers. Deux implémentations de LXC, Warden et LMCTFY, ont eu un succès modéré, mais les conteneurs Linux ont vraiment décollé avec l'introduction de Docker en 2013. Après cela, des problèmes tels que la sécurité, la mise à l'échelle, la mise en réseau et bien d'autres ont prospéré et ont continué à s'améliorer avec l'âge. Les conteneurs Linux ont atteint le niveau d'acceptation et de maturité de sorte qu'ils deviendront sans aucun doute le nouveau standard du développement logiciel.

Les conteneurs Windows ont été introduits dans l'écosystème .NET avec la sortie de Windows Server 2016, permettant aux développeurs de créer, gérer et gérer des applications .NET Framework tout comme les conteneurs Linux. Commandes comme construction de docker et course de docker étaient identiques sur Windows et Linux. La seule différence était le système d'exploitation sous-jacent.

Red Hat a annoncé la disponibilité générale (GA) et la prise en charge des conteneurs Windows dans OpenShift à la fin du mois de décembre 2020. Cela signifie que je me répète car c'est tellement incroyable que vous puissiez créer une image de votre application .NET Framework (par exemple, une site Web exécutant IIS) sur votre PC Windows et exécutez-le dans le cluster OpenShift.

Il n'y a qu'une seule considération: vous avez besoin d'un nœud Windows dans le cluster.

Exécute les conteneurs Windows dans OpenShift

Pour les opérateurs, veuillez noter: pour exécuter des conteneurs Windows dans OpenShift, vous avez besoin d'un cluster qui comprend un nœud Windows capable d'exécuter des conteneurs Windows. C'est la "sauce magique" pour exécuter des conteneurs Windows dans OpenShift. Actuellement, Windows Server 2019 est le meilleur choix pour exécuter des conteneurs Windows.

Développeurs, rien de plus simple. En tant que constructeur de bits, vous ne voyez pas beaucoup de différence; vous créez votre application, construisez une image et elle est distribuée à OpenShift. Une bonne chose est que vous n'avez pas à vous soucier des applications exécutées sur le même port. OpenShift est basé sur Kubernetes, et Kubernetes attribue automatiquement des ports et garde une trace du mappage entre ce qu'il (Kubernetes) expose et ce que votre application utilise.

La recette du succès

Lorsque vous avez un cluster qui peut exécuter des conteneurs Windows, j'ai créé une archive GitHub (repo) avec du code et des instructions pour essayer cette technologie passionnante. Jusque-là, vous pouvez lire et suivre ici. Un peu comme lire une recette avant de préparer le merveilleux dîner.

Avis de matériel bonus super fantastique: le dépôt contient des instructions, des scripts et des données pour créer et construire une base de données Microsoft SQL Server à l'intérieur d'OpenShift cluster, car pourquoi ne pas prendre un dessert avec le dîner?

Créer l'image du conteneur Windows

Pour créer une image de conteneur Windows, nous avons besoin des ingrédients suivants:

  1. Une application .NET Framework unifiée – dans ce cas, un site Web à exécuter dans IIS
  2. Un fichier de configuration pour construire l'image, "Dockerfile", qui rassemble tout
  3. Une commande pour construire l'image
  4. Un registre d'images où nous pouvons stocker l'image, que nous allons éventuellement extraire dans le cluster OpenShift

L'application compilée

Nous construisons un site Web appelé "Net Candy Store", MVP (projet minimalement viable) dont notre startup a besoin pour démarrer le plus tôt possible. Pour le moment, l'application n'est pas entièrement fonctionnelle, mais nous commencerons à créer et à distribuer tout de suite et à peaufiner les choses au fur et à mesure que nous avancerons.

En utilisant le dépôt Git que j'ai mentionné plus tôt, nous utilisons la solution (netcandystore.sln) dans Visual Studio, comme le montre la figure 1. Une fois que nous y sommes, nous pouvons utiliser publier la possibilité de fabriquer les pièces nécessaires – netcandystore.dll binaire.

boîte de dialogue Visual Studio

Figure 1: la boîte de dialogue Publier dans Visual Studio.

Cet emplacement cible est copié et collé dans notre fichier de configuration de création d'image, «Fichier Docker».

Le fichier Docker

Nous avons maintenant besoin des instructions pour construction de docker command, qui est stocké dans le fichier «Dockerfile». Habituellement, mise à part la grammaire, cela s'appelle simplement le "fichier Docker", nous allons donc continuer avec cela. Voici le contenu de Dockerfile:

# L'instruction `FROM` spécifie l'image de base. Vous êtes
# développez l'image `microsoft / aspnet`.

À PARTIR de mcr.microsoft.com/dotnet/framework/aspnet:4.8

# L'instruction finale copie le site Web que vous avez publié précédemment dans le conteneur.
COPY ./bin/app.publish/ / inetpub / wwwroot

Fondamentalement, nous n'avons que deux choses à faire: utiliser l'image de base de Microsoft et copier notre binaire dans l'image nouvellement construite. C'est littéralement le fichier Docker le plus simple que j'ai jamais vu.

Une commande pour construire l'image

Avec tout cela en place, nous utilisons construction de docker commande pour créer l'image. Pour le nom et l'étiquette de notre image, j'utiliserai un nom complet qui pointe vers le registre d'image où je glisserai plus tard l'image. Les commandes que j'envoie à OpenShift seront soustraites de ce registre. Si vous utilisez les instructions du référentiel git que j'ai mentionné précédemment, utilisez la même image.

Dans cet esprit, voici comment créer l'image du conteneur Windows à exécuter dans OpenShift:

docker build -t quay.io/donschenck/netcandystore:2021mar8.1.

Un registre d'image pour stocker l'image

Maintenant, après m'être connecté à mon compte quay.io, je peux exécuter la commande suivante pour rendre le registre d'images disponible:

docker push quay.io/donschenck/netcandystore:2021mar8.1

Qu'en est-il des licences? Pour faire simple: les licences dépendent de la machine hôte sur laquelle vous exécutez les conteneurs. Vous pouvez trouver plus d'informations sur cette page régulière pour Microsoft.

Distribuer l'image dans le conteneur Windows

C'est l'heure. Nous sommes prêts à distribuer cette image à l'hôte de conteneur Windows sur OpenShift et à commencer à profiter des fruits du travail de .NET Framework. Mais il y a un petit problème: si vous essayez de déployer sur votre cluster, la distribution peut se bloquer avec une erreur de délai d'expiration. C'est une solution simple, et j'en ai inclus une sélection dans mon dépôt Git. Le truc est de tirer docker l'image du serveur Windows quelque peu volumineuse (5,25 Go) vers le nœud Windows du cluster à partir du nœud lui-même. En prime, si vous exécutez d'autres conteneurs Windows dans votre cluster, sur le même nœud Windows, ils peuvent utiliser la même image de serveur. En d'autres termes, vous n'avez probablement besoin de faire ce "préchargement" qu'une seule fois.

Les détails de cette étape sont sur mon repo Git, je ne les répéterai donc pas ici. La vue d'ensemble est la suivante: recherchez le nom du nœud Windows et utilisez SSH pour exécuter tirer docker la commande à l'intérieur. Une fois terminé – cela prend deux ou trois minutes – les autres sont des opérations OpenShift typiques: créez une distribution qui pointe vers l'image de votre application, un service associé et une route pour l'exposer publiquement.

Conclusion: un guide à suivre

Pour suivre un guide étape par étape, y compris un code de conteneur Windows, une installation de SQL Server sur OpenShift et l'installation d'un programme .NET 5 (.NET Core) s'exécutant dans un conteneur Linux, suivez ce référentiel: https: To follow a step-by-step guide, including a Windows container code, an installation of SQL Server on OpenShift, and the installation of a .NET 5 (.NET Core) program running in a Linux container, follow this repo: https: //github.com/redhat-developer-demos/netcandystore.