Infrastructure
Pourquoi les conteneurs peuvent être une excellente solution pour une PME
Après la virtualisation et les machines virtuelles, une autre technologie a profondément changé la manière de déployer les applications : les conteneurs, dont Docker est aujourd’hui l’un des outils les plus connus.
À première vue, Docker peut sembler réservé aux développeurs ou aux grandes plateformes Internet.
Pourtant, son principe répond à un problème très concret rencontré par de nombreuses PME : comment installer plusieurs applications sur une infrastructure sans transformer chaque serveur en assemblage complexe de logiciels, de versions et de dépendances ?
Docker apporte une réponse intéressante : placer une application et une grande partie de ce dont elle a besoin dans un environnement isolé et reproductible.
L’application devient ainsi beaucoup plus facile à installer, déplacer, mettre à jour et reconstruire.
Le problème classique : « ça fonctionne sur ce serveur »
Une application moderne dépend rarement d’un seul programme.
Elle peut nécessiter une certaine version de PHP, Python ou Node.js.
Elle utilise une base de données.
Elle a besoin de bibliothèques particulières.
Elle dépend parfois de Redis, d’un moteur de recherche, d’un serveur web ou de plusieurs services complémentaires.
Au fil du temps, le serveur accumule donc des composants.
Puis arrive une deuxième application.
Elle nécessite une autre version de PHP.
Une troisième utilise une version différente de la base de données.
Une mise à jour devient alors risquée car la modification nécessaire à une application peut en perturber une autre.
Docker cherche précisément à résoudre ce problème.
Le conteneur embarque l’environnement de l’application
Avec Docker, l’application fonctionne dans un conteneur.
On peut simplifier en disant que ce conteneur contient l’application et l’environnement logiciel nécessaire à son fonctionnement.
L'application A peut ainsi utiliser une version particulière d'un composant tandis que l'application B utilise une autre version.
Les deux environnements restent séparés.
Le serveur hôte n'a plus besoin d'être configuré spécifiquement pour chaque application de la même manière qu'avec une installation traditionnelle.
Cette isolation simplifie considérablement l’exploitation.
Docker n’est pas une machine virtuelle
La distinction est importante.
Une machine virtuelle possède généralement son propre système d’exploitation complet.
Un conteneur est beaucoup plus léger.
Il partage le noyau du système hôte tout en isolant l’application et son environnement.
On peut donc généralement démarrer un conteneur très rapidement et en faire fonctionner beaucoup avec relativement peu de ressources.
Cela ne signifie pas qu’il faut remplacer toutes les VM par Docker.
Les deux technologies répondent à des besoins différents.
VM et Docker fonctionnent très bien ensemble
Une architecture particulièrement intéressante pour une PME consiste justement à combiner les deux.
On peut avoir :
Serveur physique
↓
Hyperviseur
↓
Machine virtuelle Linux
↓
Docker
↓
Application A — Application B — Application C
La machine virtuelle apporte une séparation claire au niveau de l’infrastructure.
Docker apporte ensuite une séparation entre les applications.
Cette architecture permet de bénéficier des avantages des deux technologies.
La VM isole l’environnement. Docker organise les applications à l’intérieur de cet environnement.
Déployer une application devient beaucoup plus simple
Prenons une application web nécessitant :
un serveur web ;
PHP ;
MariaDB ;
Redis ;
un service de tâches en arrière-plan.
Dans une installation traditionnelle, l’administrateur doit installer et configurer chacun de ces composants.
Avec Docker, on peut décrire l’architecture nécessaire.
Le système sait alors quels conteneurs doivent être lancés, comment ils communiquent et quels volumes doivent conserver les données.
L’environnement devient déclaratif.
Au lieu de disposer uniquement d'un serveur configuré manuellement dont une seule personne connaît réellement l'histoire, on possède également une description de l'environnement nécessaire au fonctionnement de l'application.
Docker Compose rend cette logique particulièrement intéressante
Une application n'est souvent pas constituée d'un seul conteneur.
Elle peut avoir :
Application
↓
Base de données
↓
Redis
↓
Worker
↓
Proxy
Docker Compose permet de décrire cet ensemble dans des fichiers de configuration.
Il devient alors possible de recréer la pile applicative beaucoup plus facilement sur une autre machine disposant de Docker.
C'est un changement important.
On ne documente plus seulement l'installation dans un fichier texte en espérant que quelqu'un suivra correctement toutes les étapes.
Une partie de l'infrastructure devient elle-même décrite par du code et de la configuration.
« Ça marche chez moi » devient beaucoup moins fréquent
C'est l'une des raisons pour lesquelles Docker est extrêmement apprécié des développeurs.
Une application fonctionne sur l'ordinateur du développeur mais pas sur le serveur.
Pourquoi ?
Mauvaise version de PHP.
Bibliothèque absente.
Configuration différente.
Extension manquante.
Avec un environnement conteneurisé, le développement, les tests et la production peuvent utiliser des environnements beaucoup plus proches.
L'application testée est donc plus proche de celle qui sera réellement déployée.
Cela réduit une partie des mauvaises surprises lors des mises en production.
Les mises en production deviennent plus propres
Avec une ins