Partie II - La technologie Docker chez Touch & Sell

Pour faire suite à notre premier article qui présente la technologie Docker, nous souhaitons à présent vous parler plus précisément de l’utilisation de cette technologie chez Touch & Sell.

Présentation de l'infrastructure chez Touch & Sell  

Notre back-office est composé de 5 services :

  • la base de données (postgresql), où sont stockées les données de nos clients,
  • l'application (unicorn), qui contient tout la logique et fournit l'interface graphique que vous utilisez tous les jours,
  • le serveur web (nginx), qui gère tous les documents qui n'ont pas besoin d'être calculés par le serveur d'application (images, feuilles de styles, etc.),
  • le traitement en arrière-plan (sidekiq), qui permet à l'application de réaliser des actions longues en arrière-plan qui ne nécessite pas forcément d'interface graphique. Le serveur web gère notamment l'envoi des e-mails.
  • le cache mémoire (redis), actuellement utilisé uniquement pour le dialogue entre l'application et le traitement en arrière-plan.

Ces 5 services dépendent les uns des autres et doivent communiquer d’où la nécessité de construire des liens, même si chacun est déployé dans un conteneur, isolé des autres.

infra dociker.png

Les volumes

Le stockage de fichiers est une autre part importante de Touch & Sell, ce n'est pas un service dédié, il utilise les volumes Docker pour partager les fichiers entre plusieurs conteneurs.

Qu’est-ce qu’un volume ? Les volumes sont des espaces de stockage de fichiers gérés par Docker mais indépendants des conteneurs et cela leur confère deux utilités :

  • la liberté de détruire le conteneur de base de données et de le remplacer par un autre plus récent sans avoir à migrer les données, puisque les fichiers resteront partagés entre les 2 versions.
  • le partage des fichiers entre plusieurs conteneurs, par exemple l'application et le traitement en arrière-plan travaillent tous les deux sur les fichiers de nos clients et nous ne voulons pas dupliquer ces données.

L'orchestration

L'orchestration consiste à déployer ses différents services sur un ou plusieurs serveurs afin de mettre en place l'infrastructure souhaitée. Avec Docker, cette tâche se réalise grâce à l'outil Docker Compose qui permet de déclarer tous les services de l'infrastructure, les volumes et les liens qui unissent ces services. Docker Compose s'occupe alors de créer et configurer les conteneurs correspondants pour s'assurer du fonctionnement de l'infrastructure.

La configuration d'orchestration est la même pour tous nos serveurs et machines de développement grâce à Docker Compose. Cette manoeuvre nécessite un peu plus d'efforts de la part du développeur lorsqu'il souhaite notamment ajouter un service, mais elle garantie le fonctionnement sur tous les serveurs par la suite. Une autre infrastructure dédiée au développement est également utilisée en parallèle pour simplifier les tâches quotidiennes de l'équipe R&D.

En ce qui concerne la gestion du back-office, nous utilisons les fichiers de configuration suivants :

  • docker-compose.yml : le fichier par défaut de Docker Compose qui contient l'infrastructure optimisée pour le développement. Le but est lorsqu'un nouveau développeur créé son infrastructure de développement sur sa machine, il puisse la créer très rapidement.
  • docker-compose.prod.yml : l'infrastructure de "production", est quand à elle utilisée pour tous les déploiements nécessitant une validation de l'infrastructure finale, sur le poste du développeur, sur notre serveur de recette ou sur la production elle-même.
  • docker-compose.common.yml : un fichier mettant en commun tout ce qui se trouve entre l'infrastructure de développement et de production. Il évite ainsi les répétitions et réduit le risque d'erreurs.
  • docker-compose.override.yml : un fichier spécifique à chaque développeur qui n'est pas partagé aux autres membres de l'équipe. Il permet d'altérer localement l'infrastructure du développeur en fonction des contraintes de sa machine (un travail qui se réalise à la fois sur Mac, Linux et Windows qui peut amener quelques différences dans l'usage de Docker).

Le déploiement

Pour déployer une nouvelle version de l'application, nous utilisons uniquement Docker Compose. Une image de programme Docker (unité complète et légère permettant de faire tourner un programme particulier) est construite pour chaque service directement sur le serveur de déploiement. Cette image permet à l'équipe R&D de démarrer une nouvelle version des conteneurs qui, grâce aux volumes, reprennent les mêmes données des versions précédentes. 

Docker Compose a aussi l'avantage de réussir à faire fonctionner deux infrastructures similaires en parallèle. Ce mécanisme permet de supprimer les temps de coupures durant les déploiements les plus simples.

Un seul gros serveur est utilisé actuellement pour l'infrastructure principale (en plus des serveurs de backup...). A l'avenir, nous envisageons de migrer sur une configuration utilisant Docker Swarm, la nouvelle technologie de Docker qui permet de répartir ses conteneurs sur plusieurs machines. L'utilisation de cette technologie permettra de supporter la croissance de Touch & Sell.

0 Commentaire(s)