Quand utiliser des conteneurs Docker

Effectué

Comme nous l’avons vu, Docker a plusieurs fonctionnalités que nous pouvons utiliser. Ici, nous allons examiner les avantages que Docker offre à nos équipes de développement et d’exploitation. Nous allons aussi examiner quelques scénarios où Docker peut ne pas être le meilleur choix.

Ces aspects vous aideront à déterminer si Docker est adapté à votre stratégie de conteneurisation.

Rappelez-vous de ce qui a été vu précédemment : notre équipe est confrontée à un certain nombre de problématiques lors du développement et de la publication de notre portail de suivi des commandes. Elle recherche une solution pour :

  • Gérer facilement nos environnements d’hébergement.
  • Garantir la continuité de la façon dont nous délivrons nos logiciels.
  • Garantir que nous faisons une utilisation efficace du matériel des serveurs.
  • Permettre la portabilité de nos applications.

Docker est une solution à ces défis. Jetons un coup d’œil à tous les avantages que nous avons abordés jusqu’à présent.

Avantages de Docker

Quand nous utilisons Docker, nous obtenons un accès immédiat aux avantages de l’offre de conteneurisation.

Utilisation efficace du matériel

Les conteneurs s’exécutent sans utiliser de machine virtuelle. Comme nous l’avons vu, le conteneur s’appuie sur le noyau de l’hôte pour des fonctions comme le système de fichiers, la gestion du réseau, la planification des processus et la gestion de la mémoire.

Diagram contrasting VM resource use versus Docker resource use.

En comparaison, nous pouvons voir qu’une machine virtuelle nécessite un système d’exploitation installé pour fournir les fonctions du noyau aux applications qui s’exécutent dans la machine virtuelle. Gardez à l’esprit que le système d’exploitation de la machine virtuelle nécessite également de l’espace disque, de la mémoire et du temps processeur. En supprimant la machine virtuelle et la nécessité d’un système d’exploitation, nous pouvons libérer des ressources sur l’hôte et l’utiliser pour exécuter d’autres conteneurs.

Isolation des conteneurs

Les conteneurs Docker offrent des fonctionnalités de sécurité permettant d’exécuter simultanément plusieurs conteneurs sur le même hôte sans s’affecter mutuellement. Comme nous l’avons vu, nous pouvons configurer le stockage de données et le réseau pour isoler nos conteneurs, ou partager des données et la connectivité entre des conteneurs spécifiques.

Comparons cette fonctionnalité à l’utilisation de machines virtuelles.

Diagram that shows a physical host running multiple VMs.

Supposons que nous avons un hôte physique exécutant deux machines virtuelles. Nous avons trois applications et nous voulons qu’elles s’exécutent isolées les unes des autres. Nous décidons de déployer la première application sur la machine virtuelle VM 1 et la deuxième sur la machine virtuelle VM 2 pour séparer les deux applications l’une de l’autre. Si nous choisissons maintenant d’installer la troisième application, nous devrons installer une autre machine virtuelle pour rester conforme à ce modèle.

Portabilité des applications

Les conteneurs s’exécutent presque partout : sur des postes de travail, sur des serveurs physiques, sur des machines virtuelles et dans le cloud. Cette compatibilité du runtime facilite le déplacement des applications conteneurisées entre différents environnements.

Comme les conteneurs sont légers, ils ne sont pas sujets à des démarrages ou des arrêts lents, comme c’est le cas des machines virtuelles. Cet aspect rend fluide et rapide le redéploiement et d’autres scénarios de déploiement, comme le scale-up ou le scale-down.

Livraison des applications

Avec Docker, le conteneur devient l’unité que nous utilisons pour distribuer les applications. Ce concept nous permet d’avoir un format de conteneur standardisé utilisé à la fois par nos équipes de développement et nos équipes d’exploitation. Nos développeurs peuvent se concentrer sur le développement de logiciels, et l’équipe d’exploitation sur le déploiement et la gestion des logiciels.

Nous pouvons utiliser le conteneur à chaque étape de notre système de déploiement une fois que notre équipe de développement a publié une build de notre application. Les conteneurs sont de parfaits candidats pour l’intégration continue, et ils raccourcissent les délais entre la création et la mise en production.

Gestion des environnements d’hébergement

Nous configurons l’environnement de nos applications à l’intérieur du conteneur. Ce confinement apporte de la flexibilité à notre équipe d’exploitation pour gérer l’environnement de l’application au plus près. Notre équipe peut superviser les mises à jour du système d’exploitation, appliquer des correctifs de sécurité une seule fois et déployer le conteneur mis à jour en fonction des besoins.

Notre équipe peut également gérer les applications à installer, à mettre à jour et à supprimer, sans affecter les autres conteneurs. Chaque conteneur est isolé et ses limites de ressources sont affectées séparément des autres conteneurs.

Déploiements cloud

Les conteneurs Docker constituent l’architecture de conteneurs par défaut utilisée dans les services de conteneurisation Azure, et de nombreuses autres plateformes cloud les prennent en charge.

Par exemple, vous pouvez déployer des conteneurs Docker sur Azure Container Instances, Azure App Service et Azure Kubernetes Services. Chacune de ces options vous offre des fonctionnalités et des possibilités différentes.

Par exemple, Azure Container Instances vous permet de vous concentrer sur la conception et la création de vos applications sans devoir gérer l’infrastructure. Et quand vous avez un grand nombre de conteneurs à orchestrer, le service Azure Kubernetes facilite le déploiement et la gestion des déploiements de conteneurs à grande échelle.

Quand ne pas utiliser des conteneurs Docker

Les conteneurs Docker offrent de nombreux avantages, mais gardez à l’esprit que les conteneurs peuvent ne pas répondre à toutes vos exigences. Il y a quelques aspects à prendre en compte.

Sécurité et virtualisation

Les conteneurs fournissent un certain niveau d’isolation. Cependant, les conteneurs partagent le noyau du système d’exploitation d’un même hôte, qui peut être un point d’attaque unique.

Les hôtes Windows fournissent un modèle d’isolation supplémentaire sur lequel une machine virtuelle spécialement conçue peut être utilisée pour isoler le conteneur au niveau de l’hyperviseur. Ce mode est appelé mode d’isolation Hyper-V et ajoute une autre couche de sécurité entre les conteneurs et l’hôte du conteneur.

Nous devons aussi prendre en compte des aspects comme le stockage et les réseaux pour être sûrs de considérer tous les aspects de la sécurité. Par exemple, tous les conteneurs vont utiliser le réseau « bridge » (pont) par défaut et peuvent accéder l’un à l’autre via une adresse IP.

Toutes les applications ne vont pas tirer parti de la conteneurisation. Dans ces cas, il peut être plus judicieux d’utiliser une machine virtuelle.

Supervision des services

La gestion des applications et des conteneurs est plus complexe que les déploiements traditionnels de machines virtuelles. Il existe des fonctionnalités de journalisation qui nous informent sur l’état des conteneurs en cours d’exécution, mais des informations plus détaillées sur les services à l’intérieur du conteneur sont plus difficiles à superviser.

Par exemple, Docker nous fournit la commande docker stats. Cette commande retourne des informations pour le conteneur, comme le pourcentage d’utilisation du processeur, le pourcentage d’utilisation de la mémoire, les E/S écrites sur le disque, les données reçues et envoyées sur le réseau, et les ID des processus affectés. Ces informations sont utiles sous la forme d’un flux de données immédiat, mais aucune agrégation n’est effectuée, car les données ne sont pas stockées. Nous devons installer un logiciel de tiers pour capturer des données significatives sur une période donnée.