Conteneuriser facilement une application C# avec le CLI .NET
Les conteneurs sont un outil puissant, mais pour de nombreux développeurs, l'idée de mettre une application C# dans un conteneur peut sembler insurmontable. La configuration d'un fichier Docker et la gestion manuelle des dépendances peuvent s'avérer compliquées. Toutefois, comme l'explique Tim Corey dans sa vidéo, l'interface de programmation .NET simplifie ce processus, en permettant aux développeurs de conteneuriser leurs applications sans avoir besoin d'un fichier Docker.
Dans cet article, nous allons approfondir la conteneurisation d'une application C# en utilisant l'approche étape par étape de Tim dans sa vidéo, "Conteneuriser votre application C# facilement avec la CLI .NET." En suivant les conseils de Tim, nous comprendrons comment publier une application .NET dans un conteneur Docker sans effort.
Introduction à .NET CLI pour les conteneurs
Au début de la vidéo, Tim explique la nécessité de la conteneurisation. Il souligne que si les conteneurs sont un outil formidable, le processus de création d'un fichier Docker et sa configuration correcte peuvent s'avérer complexes.
Au lieu de créer manuellement un fichier Docker, Tim présente une approche plus simple en utilisant le CLI .NET. Cette méthode permet aux développeurs de créer une application conteneurisée sans avoir à écrire manuellement un fichier Docker.
Tim précise également que cette vidéo fait partie de sa série de formations de 10 minutes, qui se concentre sur des introductions rapides et efficaces à des sujets techniques.
L'installation de l'application
Tim commence par utiliser une application API Web minimale comme exemple. L'application contient un point de terminaison unique appelé /messages, qui renvoie certaines données.
Pour démontrer le comportement de l'application avant la conteneurisation, Tim l'exécute localement. En accédant au point de terminaison /messages, il confirme que cela fonctionne correctement en dehors d'un conteneur.
Avant de procéder à la conteneurisation, il vérifie également que :
- Docker est installé et fonctionne sur sa machine.
- Il n'y a pas d'images ou de conteneurs Docker existants au départ.
Cela permet de s'assurer que lorsqu'un nouveau conteneur est créé, les changements sont clairement visibles.
Préparation à la conteneurisation
Pour conteneuriser l'application, Tim passe à la ligne de commande dans le répertoire du projet. Il exécute ensuite la commande suivante :
dotnet publish -o:Linux -a:x64 -p:PublishProfile=DefaultContainer -c:Release
Tim décompose chaque partie de la commande :
-o:Linux→ Publie l'application pour un conteneur basé sur Linux.-a:x64→ Spécifie l'architecture comme étant de 64 bits.-p:PublishProfile=DefaultContainer→ Utilise les paramètres par défaut du conteneur.-c:Release→ Publie l'application en mode release pour de meilleures performances.
Tim insiste sur le fait que les conteneurs Linux sont préférables aux conteneurs Windows, car ces derniers servent principalement de passerelle pour les applications .NET Framework.
Publication et création d'un conteneur
Une fois la commande de publication exécutée, Tim explique que la CLI .NET déterminera automatiquement les configurations nécessaires et regroupera le tout dans un conteneur. Il souligne que :
- Cette méthode ne nécessite pas de fichier Docker.
- Le processus consiste à créer l'application et à la conteneuriser en une seule étape.
- L'image de base utilisée est le conteneur d'exécution .NET 8 de Microsoft.
Après la publication, il vérifie Docker Desktop et confirme que la nouvelle image de conteneur, background-demo, a été créée. La taille initiale du conteneur est de 221 Mo.
Tim rassure les téléspectateurs sur le fait que cette taille peut être réduite ultérieurement.
Exploitation du conteneur
Pour tester l'application conteneurisée, Tim démarre le conteneur directement à partir de Docker Desktop. Comme il n'y a pas encore de conteneurs en cours d'exécution, il clique sur "Run" et définit un paramètre facultatif :
- Il fait correspondre le port interne du conteneur (attribué de manière aléatoire) au port 8080 de la machine hôte.
Après le lancement, il accède à l'application à l'aide d'un navigateur web. Initialement, accéder à l'URL racine donne une erreur 404, mais naviguer vers /messages affiche avec succès les données attendues.
Tim souligne un point important :
- L'application fonctionne en heure UTC dans le conteneur, ce qui peut différer du fuseau horaire de la machine locale.
Il note également que l'application ayant été publiée en mode release, Swagger UI est désactivé par défaut.
Optimiser la taille du conteneur
À ce stade, la taille du conteneur par défaut est de 221 Mo, ce qui, de l'avis de Tim, est assez important. Pour réduire la taille, il introduit une image de base plus claire.
En modifiant le fichier Program.cs, il définit la famille de conteneurs sur jammy-chiseled, une image plus petite basée sur Ubuntu :
builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");
builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");
Il exécute à nouveau la commande de publication et, après avoir reconstruit le conteneur, il vérifie à nouveau la taille de l'image.
La nouvelle taille de l'image est de 113 Mo, soit une réduction d'environ 100 Mo ! Malgré sa taille réduite, l'application fonctionne de manière identique.
Suppression et recréation de conteneurs
Tim montre comment supprimer le conteneur pour nettoyer l'espace de travail. Toutefois, l'image Docker reste disponible, de sorte que le conteneur peut être recréé si nécessaire.
Il insiste sur le fait qu'une fois le conteneur construit, il peut être :
- Exécuter localement pour le développement et les tests.
- Poussé vers un registre de conteneurs comme Docker Hub ou Azure Container Registry.
- Utilisé comme base pour une application web déployée dans le nuage.
Conclusion et réflexions finales
Tim conclut la vidéo en renforçant les principaux avantages de l'utilisation de la CLI .NET pour la conteneurisation :
- Pas besoin d'un fichier Docker - L'interface de programmation .NET se charge de tout automatiquement.
- Processus simple et rapide - Il suffit d'une seule commande pour conteneuriser une application.
- Images plus petites et optimisées – Utiliser
jammy-chiseledréduit la taille du conteneur. - Déploiement transparent - Le conteneur peut être transféré vers différents services en nuage.
Conclusion
L'approche de Tim en matière de conteneurisation des applications C# à l'aide de l'interface de programmation .NET est simple, rapide et efficace. En suivant sa méthode, les développeurs peuvent créer et optimiser des conteneurs sans avoir besoin de connaissances approfondies sur Docker.
En exploitant les conteneurs Linux, les images de base optimisées et les commandes de publication rationalisées, cette technique permet aux développeurs de conteneuriser efficacement leurs applications avec un minimum d'efforts.
Si vous souhaitez aller plus loin, n'hésitez pas à consulter la vidéo de Tim Corey. Elle fournit une description claire, étape par étape, de l'ensemble du processus.
