Pourquoi les conteneurs sont-ils importants ?
- 7 minutes
Dans cette unité, vous allez suivre l’équipe Tailspin, car elle aborde certaines améliorations nécessaires à son processus DevOps. Dans ce scénario, l’équipe utilise Docker pour conteneuriser son application web. L’équipe met ensuite à jour leur pipeline CI/CD pour le prendre en charge.
Ces dernières semaines ont été difficiles
Les dernières semaines ont été un moment difficile à Tailspin. Les équipes ont du mal à respecter les échéances pour plusieurs raisons, et il y a eu des préoccupations sur la productivité au sein de l’entreprise. Andy a appelé certaines parties prenantes clés de l’équipe du site web Space Game pour recueillir des commentaires pour une présentation à venir à la direction.
Andy: Merci d'être passé. Je sais que les dernières semaines ont été rudes pour tout le monde, mais j’ai de bonnes nouvelles. La direction organise une réunion en dehors du bureau demain pour entendre des propositions sur les changements que nous pouvons apporter pour améliorer les performances. Ils m’ont invité à présenter une étude de cas sur nos succès DevOps et ont dit qu’ils sont également ouverts à d’autres idées que nous pourrions avoir. J’espérais que nous pourrions utiliser cette réunion comme occasion de réfléchir. Qui veut aller en premier ?
Tout le monde regarde Amita. Elle a été particulièrement frustrée dernièrement.
Amita: Je vais d’abord. Comme vous le savez, je teste plusieurs équipes et cela peut être difficile, car chaque équipe utilise sa propre pile technologique. Même lorsqu’elles utilisent les mêmes plateformes sous-jacentes, comme .NET ou Java, elles ciblent souvent des versions différentes. J’ai l’impression que je passe parfois la moitié de ma journée simplement à obtenir des environnements de test dans un état où ils peuvent exécuter le code que j’ai besoin de tester. Lorsque quelque chose ne fonctionne pas, il est difficile de savoir s’il existe un bogue dans le code ou si j’ai configuré accidentellement la version 4.2.3 au lieu de la version 4.3.2.
Andy écrit sur le tableau blanc « Défis liés au contrôle de version des dépendances pour l’assurance qualité ».
Tim : J’aimerais ajouter la frustration aux opérations. Nous avons quelques équipes avec des exigences de version uniques. Nous devons donc publier leurs applications sur leurs propres machines virtuelles pour garantir que leurs exigences de version et de composant ne sont pas en conflit avec nos autres applications. Outre la surcharge liée à la maintenance de l’ensemble supplémentaire de machines virtuelles, cela nous coûte également plus cher que cela si ces applications pourraient s’exécuter côte à côte.
Andy écrit « Surcharge due à la résolution de l’isolation des applications avec des machines virtuelles » dans le tableau blanc.
Mara: J'ai quelque chose à propos du développement. Il y a quelques semaines, je travaillais sur le système de mise à jour de pair-à-pair et tout fonctionnait sur ma machine, mais quand je l'ai transféré pour le déploiement, il ne fonctionnait pas en production. J’ai oublié que j’avais besoin d’ouvrir le port 315 dans le cadre du service. Il nous a fallu plus d’un jour de résolution des problèmes pour réaliser ce qui se passait. Une fois que nous avons ouvert cela en production, les choses ont fonctionné comme prévu.
Andy écrit « Incohérences de configuration entre les phases de déploiement » dans le tableau blanc.
Andy: Je pense que cette conversation est un bon début. Permettez-moi de faire des recherches sur ces questions et de voir ce que je peux faire. Voici les préoccupations que j’ai entendues :
- Défis liés au contrôle de version des dépendances pour l’assurance qualité
- Surcharge due à la résolution de l’isolation des applications avec des machines virtuelles
- Incohérences de configuration entre les phases de déploiement
Assemblage (dans un seul conteneur)
Le lendemain matin, Andy appelle une réunion pour présenter une nouvelle idée à l’équipe.
Andy: J’ai parlé hier à certains collègues des défis auxquels nous sommes confrontés, et ils ont fait des suggestions intéressantes. Celui que je suis heureux d’essayer est Docker. Il s’agit d’une technologie permettant d’empaqueter des applications entières en tant que conteneurs.
Amita: Qu’est-ce qu’un conteneur ? C’est comme un fichier .zip ?
Andy: Pas exactement. Il est plus semblable à une machine virtuelle légère conçue pour s’exécuter directement sur le système d’exploitation hôte. Lorsque vous générez votre projet, la sortie est un conteneur qui inclut votre logiciel et ses dépendances. Toutefois, ce n’est pas un système virtualisé complet, ce qui fait qu’il peut se lancer en moins d’une seconde.
Tim: Comment gère-t-il la sécurité et l’isolation ?
Andy: La sécurité et l’isolation sont gérées par le système d’exploitation hôte. Lorsque votre conteneur s’exécute dans un processus hôte, le conteneur est isolé des autres processus sur cette même machine hôte. Cette isolation permet à votre conteneur de charger les versions des composants dont il a besoin, quels que soient les autres conteneurs, peu importe leurs fonctions. Cela signifie également que vous pouvez facilement exécuter plusieurs conteneurs sur le même hôte simultanément.
Amita: Cela semble génial pour l’environnement de production, mais est-ce que cela résout les défis auxquels nous sommes confrontés plus tôt dans le pipeline ?
Andy: Absolument! Au lieu d’envoyer du code source ou un ensemble de fichiers binaires, l’intégralité du conteneur devient l’artefact. Ainsi, quand Mara travaille au développement, ses sessions de débogage s’exécutent localement sur le conteneur hébergé sur sa machine. Quand Amita teste, elle teste sur une copie de ce même conteneur, qui inclut déjà toutes les versions requises de ses dépendances. Lorsque Tim gère notre environnement de production, les conteneurs qu’il surveille sont des copies autonomes des mêmes conteneurs développés par Mara et testés par Amita.
Mara: Quelle est la difficulté de développer une application conteneur ? Devons-nous apporter des modifications significatives à notre code existant ?
Andy: Les conteneurs sont davantage une technologie d’empaquetage et de déploiement. Ils n’ont pas d’impact sur le logiciel fondamental que nous écrivons. Nous pouvons simplement demander à nos outils de produire un conteneur Docker à la fin de la build. Ensuite, lorsque nous débogueons, l’application s’exécute de ce conteneur local au lieu de notre serveur web local. En fait, les outils comme Visual Studio vous permettent même de basculer entre les environnements de débogage comme Docker et IIS Express pour nous donner la flexibilité dont nous avons besoin. J’ai en fait dépliqué notre projet de site web hier soir et l’ai converti en tant que conteneur Docker pour tester le processus. J’ai uniquement besoin d’ajouter une configuration de conteneur de base ; Je n’ai pas besoin de modifier notre code existant.
Mara: C’est génial de savoir. Je parie que nous pouvons même mettre à jour le pipeline de mise en production dans Azure Pipelines à partir de votre fourche pour générer et déployer la version Docker.
Andy: Tu lis mon esprit.
Qu’est-ce que Docker ?
Docker est une technologie permettant d’automatiser l’empaquetage et le déploiement de conteneurs portables et autonomes. Les conteneurs Docker peuvent s’exécuter n’importe où sur un hôte Docker, qu’il s’agisse d’un ordinateur de développement, d’un serveur départemental, d’un centre de données d’entreprise ou dans le cloud. Azure offre plusieurs façons d’exécuter des applications basées sur des conteneurs, notamment App Service ou dans le cadre de clusters gérés avec des technologies d’orchestration telles que Kubernetes.
L’équipe Tailspin a sélectionné des conteneurs Docker pour ce scénario, car elle répond à tous ses besoins :
Défis liés au contrôle de version des dépendances pour QA : les applications sont empaquetées en conteneurs qui apportent les versions correctes de leurs dépendances.
Surcharge due à la résolution de l’isolation des applications avec des machines virtuelles : de nombreux conteneurs isolés peuvent s’exécuter sur le même hôte avec des avantages sur des machines virtuelles, notamment un temps de démarrage plus rapide pour améliorer l’efficacité des ressources.
Incohérences de configuration entre les phases DevOps : les conteneurs sont fournis avec des manifestes qui automatisent les exigences de configuration, telles que les ports à exposer.
L’adoption de conteneurs Docker peut être une étape clé vers une architecture de microservices. Nous allons en parler plus tard.