Skip to content

DataScientest/Point-Recap-Docker-Devops

Repository files navigation

student-list

Ce dépôt est une application simple pour lister des étudiants avec un serveur web (PHP) et une API (Flask).

project


Objectifs

Les objectifs de ce projet pratique sont de s'assurer que vous êtes capable de gérer une infrastructure Docker.

Themes:

  • Améliorer le processus de déploiement d'une application existante
  • Versionner vos releases d'infrastructure
  • Aborder les meilleures pratiques lors de la mise en œuvre d'une infrastructure Docker
  • Infrastructure en tant que code (Infrastructure as Code)

Contexte

POZOS est une entreprise informatique située en France qui développe des logiciels pour les lycées.

Le département d'innovation souhaite révolutionner l'infrastructure existante pour garantir qu'elle puisse être évolutive, facilement déployable et maximisée en termes d'automatisation.

POZOS vous demande de construire un "POC" (Proof of Concept) pour montrer comment Docker peut les aider et à quel point cette technologie est efficace.

Pour ce POC, POZOS vous fournira une application et souhaite que vous construisiez une infrastructure "découplée" basée sur "Docker".

Actuellement, l'application fonctionne sur un serveur unique, sans évolutivité ni haute disponibilité.

Chaque fois que POZOS doit déployer une nouvelle version, quelque chose ne va pas.

En conclusion, POZOS a besoin d'agilité dans sa ferme logicielle.

Infrastructure

Pour ce POC, vous n'utiliserez qu'une seule machine avec Docker installé dessus.

La construction et le déploiement se feront sur cette machine.

POZOS vous recommande d'utiliser le système d'exploitation CentOS 7.6 car c'est le plus utilisé dans l'entreprise.

Veuillez également noter que vous êtes autorisé à utiliser une machine virtuelle basée sur CentOS 7.6 et non votre machine physique.

La sécurité est un aspect très critique pour la DSI de POZOS, donc veuillez ne pas désactiver le pare-feu ou d'autres mécanismes de sécurité. Dans le cas contraire, veuillez expliquer vos raisons dans votre livraison.

Application

L'application sur laquelle vous allez travailler s'appelle "student_list". Cette application est très basique et permet à POZOS d'afficher la liste des étudiants avec leur âge.

student_list a deux modules :

  • Le premier module est une API REST (avec une authentification de base requise) qui envoie la liste souhaitée des étudiants basée sur un fichier JSON.
  • Le deuxième module est une application web écrite en HTML + PHP qui permet à l'utilisateur final d'obtenir une liste d'étudiants.

Votre travail consiste à construire un conteneur pour chaque module et à les faire interagir entre eux.

Le code source de l'application peut être trouvé ici"ici").

Les fichiers que vous devez fournir (dans votre livraison) sont Dockerfile et docker-compose.yml (actuellement, les deux sont vides).

Maintenant, il est temps de vous expliquer le rôle de chaque fichier :

  • docker-compose.yml : pour lancer l'application (API et application web)
  • Dockerfile : le fichier qui sera utilisé pour construire l'image de l'API (des détails seront fournis)
  • requirements.txt : contient tous les paquets à installer pour faire fonctionner l'application
  • student_age.json : contient les noms des étudiants avec leur âge au format JSON
  • student_age.py : contient le code source de l'API en Python
  • index.php : page PHP où l'utilisateur final se connectera pour interagir avec le service afin de lister les étudiants avec leur âge. Vous devez mettre à jour la ligne suivante avant de lancer le conteneur du site web pour adapter api_ip_or_name et port à votre déploiement :
$url = 'http://<api_ip_or_name:port>/pozos/api/v1.0/get_student_ages';



Docker Registry

POZOS a besoin que vous déployiez un registre privé et stockiez les images construites.

Vous devez donc déployer :

Ou vous pouvez utiliser Portus pour faire fonctionner les deux.

N'oubliez pas de pousser votre image sur votre registre privé et de les montrer dans votre livraison.

PROPOSITION D'UNE SOLUTION

mkdir mini-projet-docker cd mini-projet-docker puis git clone https://github.com/nzapanarcisse/docker-datascientest-recap.git

cd simple_api
docker build . -t api-pozos:1

image

docker images

image

Création du Réseau Pozos

Nous venons de builder notre image pour l’API de l’application. Afin d’assurer une communication entre les deux microservices, nous allons créer un réseau dans lequel les deux applications vont tourner. Cela va faciliter la résolution de noms grâce aux fonctions DNS.

Vous devez savoir qu’il y a 4 types de réseaux sur Docker, comme vous l'avez vu en cours.

sudo docker network create pozos_network --driver=bridge
sudo docker network ls

création du container api-pozos

cd ..
sudo docker run --rm -d -p 5000:5000 --name api_pozos --network pozos_network -v ./simple_api/:/data/ api-pozos:1

L'option --rm indique à Docker de supprimer automatiquement le conteneur lorsque celui-ci s'arrête.

L'option -d signifie "détaché" (detached mode). Cela permet de lancer le conteneur en arrière-plan

On monte le répertoire local ./simple_api/ dans le répertoire interne /data/ du conteneur afin que l'API puisse utiliser la liste student_age.json.

on a donc monté un volume de type bind mound

docker ps -a

image

Création Webapp

Le front-end de l'application est fait en PHP. Pour communiquer avec le back-end que vous venez de déployer, il faut modifier la configuration de l’application web pour lui donner l'hôte de l'API. C’est ce que vous allez faire.

Grâce aux fonctions DNS de notre réseau de type bridge, nous pouvons facilement utiliser le nom du conteneur API avec le port que nous avons vu juste avant pour adapter notre site web :

sed -i 's\<api_ip_or_name:port>\api_pozos:5000\g' ./website/index.php

lancement

sudo docker run --rm -d --name webapp_pozos -p 80:80 --network pozos_network -v ./website/:/var/www/html -e USERNAME=toto -e PASSWORD=python php:apache
sudo docker ps

image

Test Front-end et Back-end

Nous pouvons donc tester pour voir si effectivement le front-end communique avec le back-end. Pour ce faire, nous allons exécuter la commande suivante, qui va demander au conteneur front de faire une requête à l’API back-end et de retourner le résultat. L’objectif est de tester si l’API fonctionne et si le front-end peut obtenir la liste des étudiants à partir de celle-ci.

sudo docker exec webapp_pozos curl -u toto:python -X GET http://api_pozos:5000/pozos/api/v1.0/get_student_ages

image image

Grâce à l'argument --rm que nous avons utilisé lors du démarrage de nos conteneurs, ceux-ci seront supprimés lorsqu'ils s'arrêteront. Supprimez le réseau précédemment créé :

sudo docker stop api_pozos
sudo docker stop webapp_pozos
sudo docker network rm pozos_network
sudo docker network ls
sudo docker ps

Déploiement as Code

Comme les tests ont été passés, nous pouvons maintenant mettre les paramètres docker run que nous venons de voir dans un format d'infrastructure as code, dans un fichier docker-compose.yml. Cela va nous permettre d’avoir un livrable que nous pouvons envoyer au client. voir le fichier docker-compose.yml

maintenant pour lancer l'application juste un sudo docker-compose up -d

sudo docker-compose up -d

Test Front-end et Back-end

sudo docker exec webapp_student_list curl -u toto:python -X GET http://api_pozos:5000/pozos/api/v1.0/get_student_ages

image image Nous avons donc notre application qui continue à fonctionner, avec l'avantage que nous pouvons désormais partager le code avec le client.

Création du Registry Privé

Création du registry privé qui va abriter les images de l'entreprise.

Voir docker-compose-registry.yml.

sudo docker-compose -f docker-compose-registry.yml up -d

image

image

Pousser sur le Registry Privé

sudo docker login localhost:5000
sudo docker image tag api-pozos:1 localhost:5000/pozos/api-pozos:1
sudo docker images
sudo docker image push localhost:5000/pozos/api-pozos:1

Verification registry privé

image

Mise en route de ERP de l'entreprise

cd odoo
docker-compose up -d

Vérification de la Disponibilité de l'Application

image

Pousser l'image odoo sur le Registry Privé de l'entreprise

sudo docker image tag odoo:10.0 localhost:5000/odoo:10.0
sudo docker images
sudo docker image push localhost:5000/odoo:10.0

image

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published