Nous contacter

Votre message a bien été envoyé !

Mince, visiblement quelque chose est cassé de notre côté. Que diriez vous de nous envoyer un email directement sur contact@plunge.cloud ?

Retour vers les articles

Devops : La technologie du conteneur avec Docker

Martin Catty
Martin Catty
Publié le 16 janvier 2020 08:00:00 CET

Quand on parle de conteneurs, on pense immédiatement à Docker, qui a popularisé le phénomène de conteneurisation des applications. Mais avant de parler de Docker, revenons d'abord sur l'intérêt de la conteneurisation et son fonctionnement.

Perdu(e) dans le "jargon" du devops ? Téléchargez notre glossaire et obtenez une définition simple des termes  techniques liés au devops.

Qu'est ce que la conteneurisation ?

L'objectif de la conteneurisation est de faire en sorte qu'un ensemble logiciel cohérent puisse fonctionner au sein d'un conteneur.

Pour qu'une application puisse tourner au sein d'un conteneur, elle doit être empaquetée, c'est à dire qu'on la met à l'intérieur d'un paquet (une image dans la terminologie des conteneurs) avec ses dépendances. Il existe d'ailleurs des images officielles, sur le Hub Docker par exemple, permettant de faire tourner tout type de logiciel (MySQL, Java 8, etc).

Il s'agit bien de packager les dépendances d'une application, pas les autres services auxquels elle a recours. Si par exemple vous avez une application web qui utilise une base de données PostgreSQL, vous n'aurez pas PostgreSQL dans votre paquet. Vous n'aurez que l'application en elle-même, c'est à dire son code et ses propres dépendances (par exemple, une bibliothèque tierce de génération de PDF).

L'image créée embarque ainsi le code et ses dépendances, mais c'est le système d'exploitation de l'hôte qui est utilisé. À l'inverse, quand on fait de la virtualisation, on émule un système d'exploitation complet qui est utilisé pour faire tourner les différents processus.

La conteneurisation permet donc d'utiliser moins de ressources que la virtualisation.

 

plunge-schema-machine-virtuelle

 

plunge-schema-conteneurs

 

 

Pourquoi utiliser des conteneurs ?

On a déjà mentionné précédemment que la consommation de ressources moindre par rapport à la virtualisation était un avantage en faveur des conteneurs.

Mais après tout, pourquoi ne pas simplement déployer ses applications sur des serveurs classiques, sans conteneurisation ni virtualisation ?

Garantir des environnements consistants

Un des intérêts des conteneurs est d'offrir un mécanisme reproductible du développement à la production. Reprenons notre exemple des PDF : l'équipe en charge d'introduire la fonctionnalité permettant de générer les PDF choisit un outil qui nécessite d'installer plusieurs dépendances sur la machine cible faisant tourner l'application.

En l'absence de conteneurs, et sans une parfaite concertation et communication entre équipes, si l'équipe opérationnelle n'est pas prévenue lors de la mise en production, l'application risque de ne pas fonctionner car les dépendances n'auront pas été installées. En utilisant la conteneurisation, les équipes de développement devront mettre à jour le processus de construction des images, car elles s'en servent également localement.

On s'assure donc d'avoir une image à jour lorsque l'on souhaite envoyer l'application dans un autre environnement.

Faciliter la prise en main du projet

La conteneurisation permet également de faciliter l'onboarding des nouveaux arrivants sur un projet.

Finies les documentations obsolètes d'installation locale de l'application : les outils sont forcément à jour car le reste de l'équipe s'en sert régulièrement.

Faciliter la démultiplication des conteneurs

Les images sont faites pour être immuables : si vous lancez un conteneur sur base d'une image donnée, que vous créez un fichier à l'intérieur du conteneur et que vous arrêtez ce dernier, votre fichier ne sera persisté nulle part.

C'est également un avantage des conteneurs, car même s'ils imposent d'architecturer ses applications d'une certaine façon, cette immutabilité permet de faciliter la démultiplication des conteneurs, permettant ainsi d'encaisser une montée en charge.

Simplifier la gestion des serveurs

Côté équipes opérationnelles, on se facilite également la vie car la seule chose à installer et à maintenir sur les serveurs pour faire tourner les conteneurs, c'est le runtime (par exemple le démon docker).

Il devient plus simple de gérer les serveurs en eux-mêmes : plus de casse-tête d'installation de dépendances, qui peuvent rentrer en conflit quand on veut faire tourner plusieurs applications sur un même serveur.

Cela facilite ainsi les opérations de maintenance serveur : étant donné qu'on n'y installe rien d'autre que le runtime, on peut facilement basculer les conteneurs qui tournent vers une autre machine afin de le mettre à jour.

Dans le contexte d'une faille dévoilée telle que Meltdown ou Spectre, cela permet de réagir très vite et de mettre les serveurs en sécurité très rapidement.

Faciliter l'intégration de nouvelles technologies

La technologie de conteneurisation permet également de faciliter l'introduction d'une nouvelle technologie dans le système d'information. Le système de packaging des applications, avec Docker ou tout autre outil, permet de faire tourner n'importe quel type de technologies. On peut donc indifféremment avoir un conteneur qui fait tourner du java et un autre du ruby.

C'est très pratique pour les développeurs, qui peuvent ainsi tester une technologie en particulier sans avoir à installer quoi que ce soit de spécifique à celle ci sur leurs postes. Cela reste tout aussi vrai quand les équipes opérationnelles doivent exploiter ces nouvelles technologies en production.

Cela peut également être utile lorsqu'on souhaite faire une montée de version et tester les éventuels effets de bord et régression. Par exemple, si je veux migrer de PHP 5.6 à 7, il est très simple de localement avoir une configuration fonctionnelle avec les deux versions afin de faciliter la transition du premier vers le second.

Docker, What Else ?

Docker est un outil opensource dédié à la conteneurisation, et mis à disposition pour la première fois en 2013. Il a réussi le pari de créer et rendre accessible un certain nombre d'outils haut niveau (docker, Dockerfile, docker-compose), en s'appuyant sur des fonctionnalités disponibles dans le noyau Linux.

docker outil opens source de conteneurisation

Ces technologies bas niveau disponibles dans le noyau permettent de cloisonner les ressources (LXC) et limiter les ressources utilisées, aussi bien fichiers que processeur ou mémoire (cgroups).

Si Docker est l'outil de référence sur le marché pour la mise en place de conteneurs, il n'est toutefois pas le seul. Coreos met également à disposition tout un tas d'outils permettant de mettre en œuvre des conteneurs, comme par exemple rkt.

D'autres outils couvrent également un pan spécifique de l'utilisation de conteneurs. C'est le cas par exemple de kaniko qui permet de créer des images docker sans démon Docker.

Une erreur que l'on voit assez souvent est de comparer Docker à Kubernetes alors que ces deux produits n'ont absolument pas le même périmètre fonctionnel.

Pour ne pas vous y perdre, vous pouvez télécharger notre glossaire qui reprend les principaux termes utilisés dans le domaine du devops. N'hésitez pas à nous solliciter si certains termes sur lesquels vous vous interrogez n'apparaissent pas.

Télécharger notre Glossaire du Devops

Partager l'article sur

Laisser un commentaire