Trois approches pour déployer une application web (Partie 2)

Exemple d’application : un programme de webscraping d’articles de presse avec analyse de sentiments.

Imaginez : Votre projet de webscraping est enfin terminé! ou presque… Vous avez maintenant une application capable d’extraire des articles de presse en ligne puis d’effectuer une analyse de sentiment sur leur contenu. Vous avez réglé tous les problèmes de compatibilité entre librairies NLP dans votre environnement virtuel. Votre approche de parsing est robuste, l’analyse de sentiment tient la route et vous êtes satisfait du rendu visuel.

Comment faire profiter le monde de votre invention? par le web bien sûr!

Entre un programme développé sur une machine locale et un service web sécurisé et accessible au monde entier, il existe un certain nombre d’étapes à considérer. Le terme « déploiement » désigne le processus nécessaire à la mise en service d’une application également appelé service web. Les approches pour déployer un service web sont multiples.


Dans cette série d’articles, nous présenterons 3 scénarios :

Scénario 1: Approche from scratch

Scénario 2: Approche Docker

Scénario 3: Approche serverless


Scénario 2: Utiliser Docker

Docker est un outil de conteneurisation. Il permet la virtualisation du système d’exploitation dans le but de fournir des logiciels et des paquets contenus dans des conteneurs.


Qu’est-ce qu’un conteneur ? 

Un conteneur est un paquet de logiciels, il détient tous les éléments permettant à une application d’être déployée et de fonctionner dans n’importe quel environnement.


À quoi sert un conteneur ? 

Le déploiement d’une application d’un environnement à un autre pose souvent des difficultés. Par exemple, une application fonctionnant dans un environnement A ne fonctionne pas nécessairement dans un environnement B à cause des problèmes de versions, de librairies manquantes, de compatibilité du système d’exploitation, etc. 

Le conteneur résout ces problèmes en isolant la solution du reste de l’environnement dans lequel elle est déployée. Ainsi, lorsque l’on utilise un conteneur pour déployer une application, la solution devient portable et indépendante au système.

Comme les machines virtuelles, le système de conteneur repose sur le concept de virtualisation.


Machine virtuelle vs. conteneur ? 

Une machine virtuelle est une copie complète d’un ordinateur avec son matériel (hardware), ses ressources et son système d’exploitation.

À l’inverse, un conteneur ne contient que les éléments nécessaires au fonctionnement d’une tâche ou d’une application (codes, dépendances, configuration, processus, réseaux, etc.).


Vitesse vs. Robustesse

Parce qu’elle contient tous les composants d’une vraie machine incluant un noyau dédié, une machine virtuelle est plus longue à démarrer et à fonctionner qu’un conteneur.

Les conteneurs sont beaucoup plus rapides, mais puisqu’ils se partagent un seul noyau (kernel), ils sont vulnérables si ce dernier plante. À l'inverse, le noyau d’une machine virtuelle n’est pas touché lorsqu’une autre machine virtuelle plante.


Portabilité

D’autre part, les machines virtuelles ont une portabilité limitée, ce qui n’est pas le cas pour les conteneurs. Cette caractéristique fait du conteneur un outil tout indiqué pour héberger un serveur web ou une interface de programmation applicative (API).

3 phases

Les étapes: 

  • Installer Docker

  • Accéder à Docker via le terminal

  • Créer un dockerfile à l’intérieur de l’application

    • (peut être nécessaire) créer un fichier .dockerignore

  • Créer une image: 

docker build -t <docker-name>

  • Créer le conteneur: 

docker run -p 5000:8080 <tag-name> or <image-id>

Note : le docker continue de tourner même après la fermeture du terminal. 


Une fois le docker arrêté, les données créées durant la session sont perdues.


Pour maintenir des données partagées entre différents conteneurs → utiliser un “volume” : 

docker volume create <shared-file-name>

Note : docker desktop peut aider à gérer les différents dockers en fonctionnement et le debugging.


Docker compose permet de coordonner la création simultanée de différents dockers.

Exemple: 

  • Un conteneur pour l’application

  • Un conteneur pour la base de données

  • Un volume pour maintenir la base de données disponible entre les conteneurs


En résumé:

La conteneurisation permet la virtualisation du système d’exploitation et se distingue en cela d’une machine virtuelle. Ses deux plus grands points forts sont la portabilité et la vitesse. Avec Docker, le processus se divise en trois étapes : le dockerfile, l’image et le conteneur. Dans un prochain article, nous aborderons la troisième et dernière approche de déploiement : l’approche “sans serveur” (serverless). 


Restez branchés pour la suite…