Comment ça fonctionne ?

Docker est tout simplement un outil qui permet de segmenter les processus applicatifs afin qu'ils puissent s’exécuter de façon indépendante les unes des autres. Pour ceux ayant déjà une expérience d'administrateur système, rien de nouveau : chroot existe déjà depuis pas mal d'années.

Afin d'expliquer tout ceci simplement, prenons le cas d'un serveur web qui héberge plusieurs sites.

Je vais donc avoir besoin d'installer sur ma machine les logiciels suivants :

  • Apache,
  • Mysql,
  • Php.

Cette installation peut se visualiser de la façon suivante :

Avec quelques commandes d'installation, le tour est joué facilement en quelques minutes. Il reste ensuite à configurer pour chaque site Apache et MySQL :

  • Création de vhosts pour Apache,
  • Création des bases de données et utilisateurs sur MySQL.

Ce schéma monte très clairement qu'il n’existe aucune isolation entre les différents sites et applications. Par exemple, une faille de sécurité sur le site A pourrait entrainer un incident sur le site B ou C en cas de mauvaise configuration.

Docker va nous permettre de répondre à cette problématique avec un schéma d'installation qui va ressembler à cela :

Les avantages

La philosophie

La philosophie Docker repose sur la décomposition de vos couches applicatives. Comme nous avons pu le voir sur le schéma précédent un site devient une couche des 3 logiciels différents nous permettant l'affichage de celui-ci. Cette décomposition va avoir plusieurs avantages :

  • Chaque application peut être maintenu de façon autonome.
  • Les couches applicatives peuvent utiliser des versions différentes des logiciels ( PHP 5, PHP  7, etc ).

Les images

Lorsque l'on souhaite créer un container, plusieurs options s’ouvrent à nous.

Il est possible d'utiliser une image déjà existante et présente sur un registre docker ( nous verrons plus tard, mais ces registres peuvent être public ou privé ). Le registre le plus connu est celui fourni par la société derrière Docker : Docker Hub.

Il est également possible de créer ses propres images à l'aide de fichier Dockerfile , étape par étape et rendre possible l'automatisation de telles images. Ou bien même encore à partir d'un conteneur existant ( sauvegarde d'un conteneur dans une image ).

Ce système d'image va également nous permettre d'aborder le dernier point avantageux de la solution ( Attention il ne s'agit pas ici des seuls avantages de Docker, mais bien de ceux pertinents pour un utilisateur qui souhaite découvrir la solution ) : l'interopérabilité.

L’interopérabilité

Grâce à la couche "conteneur" de Docker, nos images vont embarquer leur "propre système d'exploitation". Et ainsi nous permettre d'utiliser ces images sur n'importe quel autre système.

Et oui nous allons pouvoir concevoir des couches applicatives sous un OS GNU/Linux et les utiliser sous Windows...

De part le système d'image, il devient également très simple de réaliser la migration d'un serveur à un autre. Nous devenons totalement indépendant du système d'exploitation et cela va fortement faciliter la maintenance des couches applicatives.

Pour information le moteur ( engine ) Docker fonctionne actuellement sur les systèmes suivants :

  • Windows,
  • Linux,
  • Mac.

Les limites

Il en faut bien quand même ... mais juste quelques unes...

Le nombre de conteneurs...

En se référant à notre précédent exemple de serveur hébergant 3 sites internets on peut très rapidement se rendre compte de la portée de ce problème.

Pour chaque site web, je vais avoir 3 conteneurs différents et le calcul devient donc très simple: 9 conteneurs rien que pour nos 3 sites. Sachant que nous n'avons pas ajouté de conteneurs pour les accès FTP/SFTP par exemple ou de système de cache...

On peut très rapidement arriver sur un nombre conséquents de conteneurs en production. Il va alors être essentiel d'utiliser un orchestrateur, qui comme son nom l'indique va nous permettre "d'orchestrer" nos différents conteneurs.

La sécurité

Nous avons pu voir que la sécurité pouvait être renforcée par l'utilisation de Docker. Toutefois il est intéressant de vous alarmer sur certains aspects de l'utilisation des images :

Elles peuvent être compromises ou récupérer des informations à votre insu. N'utilisez que des dépôts et images de confiance.

Systemd

Les images docker sont conçues pour lancer un processus lors de leur démarrage et non plusieurs.

Il n'existe donc pas de système d'initialisation de daemon au sein de Docker car cela ne respecte pas la philosophie de la solution : un service = un conteneur.

Donc au quotidien ...

Docker est une solution offrant de nombreux avantages pour l'automatisation de vos infrastructures et va faciliter et accélérer vos déploiements.

En vous rendant indépendant de vos serveurs et des systèmes d'exploitations utilisés, vous allez pouvoir transporter de manière simple et rapide vos solutions logicielles de l'environnement de développement jusqu'à votre environnement de production.

En quelques mots, vous voilà aux portes du DevOps et de l'intégration continue...