Modernisez vos applications avec les conteneurs

écrit par Hichem publié le lundi 27 avril 2020

 La conteneurisation est une approche du développement logiciel dans laquelle une application ou un service, ses dépendances et sa configuration (résumées en tant que fichiers « manifest » de déploiement) sont regroupées sous la forme d'une image de conteneur.

L'application conteneurisée peut être testée en tant qu'unité et déployée en tant qu'instance d'image de conteneur sur le système d'exploitation hôte.

Les conteneurs isolent également les applications les unes des autres sur un système d'exploitation partagé.

Les applications conteneurisées s'exécutent sur un hôte conteneur qui s'exécute à son tour sur le système d'exploitation (Linux ou Windows).

Les conteneurs ont donc une empreinte nettement plus petite que les images de machines virtuelles (VM).

Chaque conteneur peut exécuter une application Web complète ou un service, comme illustré sur la figure ci-dessous :

 

Dans cet exemple, l'hôte Docker est un hôte conteneur et App1/App2/Svc1/Svc2 sont des applications ou des services conteneurisés.

L'évolutivité est un autre avantage de la conteneurisation : vous pouvez évoluer rapidement en créant de nouveaux conteneurs pour les tâches à court terme.

Du point de vue de l'application, l'instanciation d'une image (création d'un conteneur) est similaire à l'instanciation d'un processus tel qu'un service ou une application Web.

Cependant, pour des raisons de fiabilité, lorsque vous exécutez plusieurs instances de la même image sur plusieurs serveurs hôtes, vous souhaitez généralement que chaque conteneur (instance d'image) s'exécute sur un serveur hôte ou une machine virtuelle différente, dans des domaines d'erreur différents.

En bref, les conteneurs offrent les avantages de l'isolation, de la portabilité, de l'agilité, de l'évolutivité et du contrôle tout au long du flux de travail durant le cycle de vie de l'application.

L'avantage le plus important est l'isolement de l'environnement fourni entre Dev et Ops.

Qu’est-ce que Docker ?


Docker est un projet open source, permettant d'automatiser le déploiement des applications sous la forme de conteneurs portables et autonomes pouvant s'exécuter sur le cloud ou sur hôte.

Docker est également une entreprise qui promeut et fait évoluer cette technologie, en collaboration avec les fournisseurs de cloud, Linux et Windows, y compris Microsoft.

  • Les développeurs peuvent utiliser des environnements de développement sous Windows, Linux ou MacOs
  • Sur l'ordinateur de développement, le développeur exécute un hôte Docker sur lequel les images Docker sont déployées, y compris l'application et ses dépendances
  • Les développeurs qui travaillent sous Linux ou sur Mac utilisent un hôte Docker basé sur Linux et peuvent créer des images uniquement pour les conteneurs Linux
  • Les développeurs travaillant sur Mac peuvent modifier le code ou exécuter la Docker CLI à partir de MacOs, mais à la date de rédaction de ce document, les conteneurs ne s'exécutent pas directement sur MacOs
  • Les développeurs qui travaillent sous Windows peuvent créer des images pour les conteneurs Linux ou Windows
  • Pour héberger des conteneurs dans des environnements de développement et fournir des outils de développement supplémentaires, Docker fournit Docker Community Edition (CE) pour Windows ou pour MacOs

Ces produits installent la machine virtuelle nécessaire (l'hôte Docker) pour héberger les conteneurs

  • Docker propose également Docker Enterprise Edition (EE), conçu pour le développement en entreprise et utilisé par les équipes informatiques qui développent, expédient et exécutent de grandes applications critiques pour l'entreprise

Les images Dockers

 

Une image de conteneur est un paquet avec toutes les dépendances et informations nécessaires à la création d'un conteneur.

Une image inclut toutes les dépendances (telles que les infrastructures), ainsi que la configuration de déploiement et d'exécution à utiliser par un environnement de conteneur.

Généralement, une image provient de plusieurs images de base, qui sont des couches empilées les unes sur les autres pour former le système de fichiers du conteneur.

Une image est immuable une fois créée

Le Dockerfiles est un fichier Docker.

En réalité, il s’agit d’un document texte contenant toutes les commandes qu'un utilisateur peut appeler sur la ligne de commande pour assembler une image.

En utilisant docker build, les utilisateurs peuvent créer une construction automatisée qui exécute successivement plusieurs instructions de ligne de commande.

Vous pouvez spécifier votre système d'exploitation ou votre environnement d'exécution requis pour votre application, ainsi que la manière dont l'application sera construite.

Pensez à votre fichier Docker comme un autre logiciel que vous maintenez avec votre application.

Vous allez gérer cela dans votre référentiel GIT.

Depuis Docker 17.05, une nouvelle fonctionnalité est apparue ; il s’agit du Build multi-étape.

Cela permet de réduire la taille des images finales.

En quelques phrases, vous pouvez utiliser, par exemple, une grande image de base, contenant le SDK, pour compiler et publier l'application, puis utiliser le dossier de publication avec une petite image de base d'exécution uniquement, pour produire une image de base, une image finale beaucoup plus petite.

Registre Docker et registre de conteneur Azure

 

Un registre est un système de stockage de contenu contenant des images Docker nommées, disponibles dans différentes versions étiquetées.

Un registre de conteneurs Azure est un registre privé Docker dans l’environnement Azure.

Vous pouvez y stocker et gérer vos images de conteneurs Docker privés.

Dans ce démarrage rapide, vous créez un registre de conteneurs avec le portail Azure.

Ensuite, utilisez les commandes Docker pour insérer une image de conteneur dans le registre, puis extrayez et exécutez l'image à partir de votre registre.

Base de données

 

Un autre aspect important de la modération de nos applications est la réduction des frais généraux liés à l’hébergement de nos bases de données.

L'hébergement moderne de bases de données via des offres « base de données en tant que service » telles que Azure MSSQL et Cosmos DB, permet aux équipes de tirer le meilleur parti de leurs données sans toute l'administration.

Supprimez le besoin d'exécuter des sauvegardes, de configurer la réplication et le basculement en utilisant ces services plutôt que d'héberger vos propres bases de données sur un ordinateur virtuel.

Azure SQL Database est une base de données relationnelle à usage général (DBaaS) basée sur la dernière version stable du moteur de base de données Microsoft SQL Server.

SQL Database est une base de données cloud à hautes performances, fiable et sécurisée que vous pouvez utiliser pour créer des applications et des sites Web basés sur les données dans le langage de programmation de votre choix, sans avoir à gérer d'infrastructure.

Azure Cosmos DB est un service de base de données entièrement géré avec une distribution mondiale clé en main et une réplication transparente multi-maîtres.

Vous pouvez exécuter des charges de travail opérationnelles et analytiques distribuées à l'échelle mondiale et à faible temps de latence, ainsi que de l'intelligence artificielle sur des données transactionnelles dans votre base de données

Key Vault

 

Azure Key Vault est un outil de stockage et d'accès sécurisé aux secrets.

Un secret est tout ce que vous souhaitez contrôler étroitement, tel que des clés d'API, des mots de passe ou des certificats.

Un coffre-fort est un groupe logique de secrets.

L’histoire de TailWind

 

TailWind Traders est une entreprise de vente fictive présentant l’avenir des expériences d’applications intelligentes qui a commencé sa transition vers le cloud.

A l'origine, les fondateurs de TailWind travaillaient avec une migration de type lift et shift jusqu'à ce qu'ils réalisent qu'il était temps d'optimiser leur déploiement.

Dans la démonstration ci-dessous, nous montrerons comment l’entreprise fera son prochain pas en matière de modération en utilisant plusieurs services gérés par Azure :

  • Application Web pour les conteneurs
    • Inclut le SSL (HTTPS)
    • Des sauvegardes
    • Autoscaling
    • Images personnalisées Docker
  • Registre de conteneurs Azure
  • Microsoft Azure SQL
  • Azure Cosmos DB
  • Azure Key Vault (facultatif)

Une démo ?

 

Nous allons implémenter l'application TailWind Traders en tant que conteneur à l'aide de Web App Service for Containers.

Nous allons créer une image Docker personnalisée, puis la stocker dans le registre de conteneurs Azure.

Une fois notre conteneur construit, nous le déploierons sur notre service d'applications Web et configurerons les variables d'environnement et les chaînes de connexion requises avec le coffre-fort de clés.

Créer un groupe de ressource :

  • Ouvrir un portail
  • Ouvrir un cloud Shell
  • Créer un groupe de ressources

Nous devons créer un groupe de ressources.

Cette commande, je l'appellerai igniteapps30, la mettrai dans l’abonnement spécifique à mon application, puis nous fournirons un emplacement où seront stockées les métadonnées de notre groupe de ressources.

    az group create --subscription "Ignite The Tour" --name igniteapps30 --location eastus
    
  •  Création de VNET

Il est maintenant temps de créer notre réseau virtuel.

Cela remplacera tous les équipements réseau que vous deviez entretenir.

Plutôt que de configurer les ports de commutation et de remplacer les cartes de ligne défaillantes, vous pouvez gérer votre réseau à partir de la ligne de commande ou du portail.

    az network vnet create --name igniteapps30vnet --subscription  "Ignite The Tour" --resource-group igniteapps30    --subnet-name default


    
  •  Afficher VNET dans le portail
  • Créer un serveur MS SQL Azure et une base de données
  • Créer une instance de CosmoDb dans Azure
  • Créer un registre de conteneur dans Azure
    az acr create --resource-group igniteapps30 --name igniteapps30acr --sku Basic --subscription  "Ignite The Tour" --admin-enabled true
    
  •  Cloner le repository dans cloud Shell
    mkdir igniteapps30
git clone https://github.com/anthonychu/TailwindTraders-Website.git igniteapps30/ 
cd igniteapps30/Source/Tailwind.Traders.Web
git checkout monolith 

    
  •  Créer une application de plan de service
    az appservice plan create --name igniteapps30plan --resource-group igniteapps30 --sku B1 --is-linux --subscription  "Ignite The Tour"
    
  •  Build et push du conteneur
    az acr build --subscription  "Ignite The Tour" --registry igniteapps30acr --image twtapp:v1 .
    
  •  Création de l’application web
    az webapp create  --subscription  "Ignite The Tour" --resource-group igniteapps30 --plan igniteapps30plan --name twtwebapp30 --deployment-container-image-name igniteapps30acr.azurecr.io/twtapp:v1
    
  • Naviguer dans les réglages de l’application
  • Ajouter une chaine de connexion
    SqlConnectionString="Server=tcp:twtsqlmod20.database.windows.net,1433;Initial Catalog=twtmod10;Persist Security Info=False;User ID=twtmod10;Password=;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"