formations/diiage/C3-4_Base_de_données_Big_Da.../20171208_Conteneurisation_D.../tp.md

4.3 KiB

TP - Utilisation de l'API Docker pour monter un cluster Minio

Objectifs

  • Comprendre et utiliser une API REST
  • Créer un outil facilitant la manipulation d'un service via son API REST
  • S'initier à la conteneurisation avec Docker
  • S'initier à la création de grappes applicatives avec Minio

Contexte et contraintes

  • Utilisation de Docker CE et de l'image minio/minio sur une distribution GNU/Linux.

Qu'est ce que Minio ?

Minio est une application répliquant les fonctionnalités du service Amazon S3, solution de stockage de fichiers dans le "cloud".

Contrairement à Amazon S3, il est possible d'installer Minio sur ses propres serveurs et surtout de mettre en place sa propre "grappe" applicative afin de créer un service de stockage redondé.

L'utilisation de Minio est intéressante puisque la plupart des applications faisant un fort usage du stockage de fichiers sont compatibles Amazon S3. Minio permet alors d'installer ces applications dans son infrastructure tout en gardant son indépendance vis à vis de la plateforme Amazon.

Production attendue

Ceci est un TP d'implémentation. Vous devez fournir à la fin de la période au minimum un code fonctionnel, même partiel.

Le TP étant complexe, le TD suivant sera consacré à vous aider à prendre en main Docker et à aborder les notions de stockage distribué, très importantes dans le secteur du "Big Data".

Étapes

  1. Dans une machine virtuelle, installer la distribution Ubuntu Server 16.04.
  2. Installez Docker sur votre machine virtuelle.
  3. Récupérer l'image Docker minio/minio
  4. Lancer un conteneur minio en suivant la documentation, se connecter à l'interface web pour se familiariser avec l'application.

À la fin du temps du TP en autonomie, vous devriez au minimum avoir passé l'étape 4.

  1. Via les commandes Docker et en suivant la documentation du site, monter une infrastructure multi-conteneurs distribuée d'instances Minio.

Pour vous faciliter le travail, sachez qu'il vous faudra créer un "network" dédié à votre groupe de conteneurs afin qu'ils puissent communiquer entre eux. La démarche est la suivante:

  • Créer le réseau dédié à vos conteneurs: docker network create minio-net
  • Dans chaque commande docker run que vous utiliserez pour lancer vos conteneurs, ajoutez le drapeau --network minio-net pour que ceux ci se retrouve dans le bon réseau.
  1. Tester un appel à l'API sur le socket Unix du service Docker avec curl
curl -v --unix-socket "/var/run/docker.sock" "http:/containers/json"

Cet appel devrait vous retourner la liste des conteneurs en cours d'exécution sur la machine. Dans le cas contraire, suivre la documentation fournie dans les ressources pour faire écouter le service Docker sur l'interface locale.

Une autre solution est de créer un tunnel avec la commande ncat pour exposer le socket unix sur un port:

ncat -vlk 8080 -c 'ncat -U /var/run/docker.sock'

Un curl -v http://localhost:8080/containers/json devrait alors vous renvoyer la liste des conteneurs en cours d'exécution.

  1. Implémenter un script/programme (langage de votre choix) qui, en utilisant l'API HTTP Docker permettra de (dans l'ordre d'importance):
  2. Lancer un certain nombre d'instances Minio en mode distribué:
**Proposition de commande**

```bash
./minio-cluster start <nombre_instances>
```
  1. Stopper les instances en cours d'exécution
**Proposition de commande**
```bash
./minio-cluster stop
```
  1. Ajouter/retirer une instance du cluster
**Proposition de commandes**
```bash
./minio-cluster add <nombre_instance>
./minio-cluster remove <nombre_instance>
```

## Ressources