Intégrer dans docker une application ANGULAR

dockerangularjs

Dans le cadre d’un POC j’ai eu à « dockeriser » une application ANGULARJS. Cette dernière utilise les briques logicielles suivantes :

J’ai donc utilisé docker-compose pour orchestrer le tout. Voici la configuration

Définition du front

Dans le répertoire front, j’ai ajouté les sources (JAVASCRIPT, HTML, CSS,…). Ca donne

Définition du back

Pour le back, vu que c’est du mock, je ne me suis pas trop embêté. J’ai donc utilisé json-server et ajouté dans le répertoire config le fichier json correspondant aux bouchons.

Exécution

Construction du projet

A la racine

Exécution

Conclusion

Et voila vous avez un site basé sur angular avec utilisation d’une API REST utilisable . Il manque encore certaines briques indispensables telles que ha_proxy par ex, mais ça me suffit pour une démo.

 

 

 

 

Docker compose

Me voilà avec mes images docker réalisées. Maintenant, il faut les lier entre elles et packager le tout.

J’ai choisi d’utiliser docker-compose. c’est l’outil standard fourni par docker. Sa principale lacune est que cet outil ne s’exécute que localement. En gros, on ne pourra pas utiliser docker-compose pour exécuter de manière distribuée les différents containers (ex. la base de données sur un nœud, le serveur web sur un autre,…). Pour mon POC je n’ai pas trop besoin de ça et, il faut le dire, j’ai un peu la flemme d’installer des softs comme kubernetes.

Je ne décrirai pas l’installation. C’est beaucoup mieux fait ici.

Je mettrai prochainement le code sur github. Je pense que le code sera mis à jour ultérieurement. Il se peut donc que certains exemples de cet articles soient obsolètes.

Définition des différents composants

J’ai trois composants :

  • une instance rabbitmq qui réceptionne des messages via le protocole MQTT
  • elasticsearch qui stocke les différents évènements et les mets à disposition
  • un programme s’appuyant sur spark-streaming qui se connecte à rabbitmq , transforme les évènements réceptionnés et les envoient dans elasticsearch.

La spécification des différents composants se fait par un fichier docker-compose.yml qui est dans le répertoire racine.

Je spécifie les images que je souhaite construire, les ports exposés et les variables d’environnement

Le fichier docker-compose.yml

elasticsearch

J’ai surchargé l’image officielle d’elasticsearch en ajoutant un fichier de configuration personnalisé et en installant le plugin shield et marvel. Voici le dockerfile:

Rabbitmq

Ici j’ai souhaité ajouter deux utilisateurs au démarrage du container

La configuration se fait dans le fichier init.sh

Spark

Enfin mon code scala qui exécute SPARK est packagé sous qui la forme d’un JAR qui contient toutes les dépendances.

Le dockerfile correspondant

Je ne décrirai pas le code ici. Peut-être dans un futur article.

Construction

Exécution