Accueil > Fichier Dockerfile pour la stack technique .NET 8 sur des agents Ubuntu
Wafaa TOUNZI
9 septembre 2024
Read this post in English

Fichier Dockerfile pour la stack technique .NET 8 sur des agents Ubuntu

Fichier Dockerfile pour la stack technique .NET 8 sur des agents Ubuntu

L’importance des conteneurs réside dans leur efficacité à packager l’application d’un développeur avec toutes ses bibliothèques et dépendances de façon à pouvoir l’expédier sous la forme d’un seul et même package. Mais avec l’arrivée de .NET 8, certaines commandes spécifiques doivent être ajoutées dans le fichier Dockerfile pour pouvoir conteneuriser l’application sous un agent Ubuntu en cas d’échec de l’installation. Dans cet article, nous aborderons donc les points suivants :

  • Comprendre les nuances de .NET 8 pour Docker.
  • Interaction entre Azure DevOps et Azure Container Registry.
  • Les bases d’un fichier Dockerfile.
  • Commandes nécessaires pour le fichier Dockerfile d’une application .NET 8 et sa tâche de pipeline CI.

 

Comprendre les nuances de .NET 8 pour Docker

Le lancement de .NET 8 s’accompagne d’une série de mises à jour et de changements importants. Cette itération présente toutefois un défi unique pour dotnet-sdk-8.0, qui est un composant essentiel pour le développement. Malheureusement, il n’est pas disponible dans les packages officiels de Linux. C’est pourquoi les développeurs doivent effectuer des étapes supplémentaires pour intégrer manuellement ce SDK dans leurs environnements. Ce processus implique ainsi d’aller au-delà des procédures habituelles, et exige l’utilisation de commandes spécifiques pour parvenir à intégrer dotnet-sdk-8.0 dans les images Docker et permettre aux applications d’exploiter pleinement les capacités de .NET 8.

 

Comment Azure DevOps et Azure Container Registry interagissent-ils ?

 

Azure DevOps, comme nous le savons tous, est une plateforme d’intégration et de livraison continues où, dans ce contexte, les pipelines sont configurés pour exécuter des tâches qui génèrent et envoient des images Docker vers Azure Container Registry (ACR), un service de stockage et de gestion des images de conteneurs Docker géré par Azure.

 

Azure DevOps et Azure Container Registry

 

Le processus d’interaction est le suivant :

Développeur : le processus commence par la validation par le développeur de son code et du fichier Dockerfile dans Azure Repos.

Azure Pipelines (générer et envoyer) : l’étape de génération utilise le fichier Dockerfile pour créer une image Docker à partir des commandes de génération Docker. Une fois l’image générée, le même processus Azure Pipelines envoie l’image à Azure Container Registry (ACR) à l’aide de la commande Docker push. L’accès à l’environnement Azure Cloud depuis des plateformes Azure DevOps est possible au moyen de connexions de service, ce qui le rend sûr et simple.

Azure Container Registry : l’image Docker est maintenant stockée dans ACR. À partir de là, l’image peut être déployée vers de nombreux services Azure comme Azure Kubernetes Service (AKS), Azure Web Apps for Containers, ou toute autre ressource pouvant extraire des images de conteneurs depuis ACR.

 

Principes de base du fichier Dockerfile

 

Un fichier Dockerfile est un document texte qui contient toutes les commandes qu’un utilisateur a généralement besoin d’exécuter successivement sur sa ligne de commande dans le but de créer un build automatisé pour générer une image.

 

Concepts clés d’un fichier Dockerfile :

 

FROM : spécifie l’image de base sur laquelle repose votre création.

RUN : exécute une commande dans le conteneur.

COPY : copie des fichiers ou des répertoires du système de fichiers hôte vers le conteneur.

WORKDIR : définit le répertoire de travail pour toutes les instructions RUN, CMD, ENTRYPOINT, COPY et ADD qui suivent dans le fichier Dockerfile.

ARG : définit une variable que les utilisateurs peuvent passer au moment de la construction.

ENTRYPOINT : configure un conteneur qui sera utilisé en tant qu’exécutable.

CMD : commande par défaut à exécuter lorsqu’un conteneur est lancé à partir de l’image Docker.

Il est très important de préciser que les développements en plusieurs étapes (multi-stage) dans Docker changent la donne. En séparant l’environnement de développement de l’environnement d’exécution, nous gagnons en clarté et en sécurité. De plus, cela permet de passer en toute simplicité du développement de l’application à son exécution.

Voici quelques-uns des avantages du développement en plusieurs étapes :

  • Des images de plus petite taille: cela signifie que votre application ne contient que l’essentiel de ce dont elle a besoin pour fonctionner, rien de plus.
  • Des conteneurs plus sûrs: les packages et les dépendances doivent être régulièrement mis à jour, car ils peuvent constituer une source potentielle de vulnérabilité que des pirates sont susceptibles d’exploiter. Le recours au développement Docker en plusieurs étapes signifie que le conteneur qui en découle sera plus sûr parce que votre image finale ne comprend que ce dont elle a besoin pour exécuter l’application.
  • Déploiement plus rapide : vous pouvez développer, tester et lancer votre application plus rapidement qu’auparavant, et celle-ci fonctionne également de manière plus fluide.

 

Solution Dockerfile pour l’environnement .NET 8 sur Ubuntu

 

Si les erreurs suivantes apparaissent dans votre journal au sujet d’une installation défaillante ou de packages SDK manquants, il vous suffit d’appliquer la solution que j’ai proposée :

ERROR: failed to solve: process « /bin/sh -c apt-get update && apt install -y dotnet-sdk-8.0 » did not complete successfully
ERROR: failed to solve: process « /bin/sh -c apt-get update && apt install -y aspnetcore-runtime-8.0 » did not complete successfully

 

Ubuntu Code Docker

 

Pour configurer un environnement .NET 8 sur un agent Ubuntu, des commandes spécifiques sont nécessaires pour installer les packages SDK manquants. Vous trouverez ci-dessous une explication de ces lignes de commande.

 

Les trois principales commandes à exécuter après l’appel à la base d’images sont les suivantes :

  • RUN apt-get update && apt-get install -y wget: Cette commande met à jour la liste des packages et leurs versions sur votre système Ubuntu. Elle installe ensuite l’utilitaire wget, qui est utilisé ici pour télécharger des fichiers supplémentaires, tels que des référentiels de packages, directement à partir de la ligne de commande.
  • RUN wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb: Cette commande utilise wget pour télécharger un package .deb depuis le référentiel de packages de Microsoft.
  • RUN dpkg -i packages-microsoft-prod.deb: la commande dpkg-i est utilisée pour installer un package .deb. La sortie obtenue « packages-microsoft-prod.deb » ajoute le référentiel de packages de Microsoft à la liste des sources pour apt qui est le gestionnaire de packages pour notre système Ubuntu.

Le reste du fichier Dockerfile contient la configuration de l’application qui, respectivement, restaurera les dépendances, créera l’application et la publiera. Vient ensuite la génération et la configuration de l’image d’exécution qui utilise la sortie publiée lors de l’étape de développement. Enfin, nous avons les étapes de configuration et d’exécution de façon à pouvoir écouter sur un numéro de port particulier, ainsi que la spécification d’un point d’entrée pour démarrer l’application.

 

Configuration du pipeline CI avec Azure DevOps

 

Voici un exemple simple illustrant la tâche de pipeline CI adéquate (Docker@2), qui se connecterait, créerait notre image Docker avec une balise (BuildID) et l’enverrait :

 

Remarque : les variables $(DOCKER_IMAGE_NAME) et $(Build.BuildId) sont utilisées pour nommer et taguer l’image, ce qui garantit que chaque version est unique et traçable à partir d’un ID de version spécifique. Il est également possible d’utiliser une version de la balise Git, telle que vx.x.x, pour le balisage au lieu d’avoir recours à BuildId.

 

Points importants à retenir

En résumé, dans le contexte de la configuration d’un fichier Dockerfile pour les applications .NET 8 et de l’exploitation du build via Azure DevOps, les trois commandes que nous avons expliquées ci-dessus sont essentielles, car elles garantissent que l’image Docker basée sur Ubuntu possède les outils nécessaires.

Vous souhaitez en savoir plus ou obtenir l’aide d’un expert au sujet des projets Azure ? Contactez-nous !

 

Offres d'emploi Cellenza Paris Lyon Nantes Luxembourg

 

Nos autres articles
Commentaires
Laisser un commentaire

Restez au courant des dernières actualités !
Le meilleur de l’actualité sur le Cloud, le DevOps, l’IT directement dans votre boîte mail.