Utilisation de Docker pour gérer une stack de développement "moderne", avec Maven / Grunt / Bower / Yeoman, et pouvoir facilement se partager ses containers entre membres d'une même équipe
2. Agenda
Le problème
Présentation de JHipster
Les problèmes liés à notre environnement de dév
La solution
Utilisation de Docker
Démonstration
Questions/Réponses
5. JHipster
Un générateur Yeoman
Permet de créer une application complète
Maven + Spring 4 + JPA côté serveur
Grunt + Bower + AngularJS + Twitter Bootstrap + Compass côté
client
2 focus principaux :
Un environnement de travail unifié, avec tous les outils
fonctionnant correctement ensemble
La production : minification des ressources, cache distribué,
monitoring, JAR exécutable unique…
6. JHipster vous intéresse ?
Rejoignez-nous !
Disponible sur Github
https://github.com/jhipster/generator-jhipster
Documentation complète sur
http://jhipster.github.io/
Twitter: @java_hipster
8. 3 problèmes principaux
Tout installer est long et compliqué
Nous voulons les bonnes versions de chaque outil
Nous ne voulons pas installer n’importe quoi en
étant « root »
9. Exemples
Pour utiliser Yeoman, il vous faut la dernière version de Node
Pas celle fournie par défaut sur Ubuntu, qui date de Mathusalem
Pour utiliser Compass, il vous faut une vieille version de Ruby
Il vous faut Ruby 1.9.1, en passant par RVM
Pour installer NPM il vous faut être « root ». Pour télécharger vos
dépendances avec Bower, il ne faut pas être « root »
Sans compter l’installation de Git, de Java, de Maven, etc…
Bon courage pour avoir quelque chose qui marche, et qui soit
identique au poste de votre collègue !
Et qui s’occupe du serveur d’intégration continue ?
10. Et la production ?
Notre stack de développement « moderne » est devenue
particulièrement complexe…
Mais ce n’est pas le cas de notre environnement de production
JHipster génère un « WAR » standard, utilisable sur n’importe
quel PAAS
JHipster génère également un « JAR exécutable », qu’il suffit
donc d’exécuter
java -jar myapplication.jar -Dspring.profiles.active=prod
Nous n’avons donc pas ce type de problème en production pour
JHipster
12. Docker
Fourni un « container » dans lequel tous ces outils
sont déjà installés
Simple à démarrer, à tuer, à recréer en fonction des
besoins
Environnement identique pour tous les
développeurs du projet, et pour le serveur
d’intégration continue
13. Recommandations sur l’utilisation de
Docker
Ne fonctionne en réalité que sous Linux
Si vous n’êtes pas sous Linux, Docker utilise une machine Vagrant
En développement, travaillez de préférence sous Linux
Avoir une machine Vagrant rajoute un niveau supplémentaire de
virtualisation, qui complexifie la configuration
Les répertoires partagés sous VirtualBox sont horriblement lents et buggés
En production, la solution future sera certainement boot2docker
https://github.com/steeve/boot2docker
Proche d’un « hyperviseur bare metal » (ils sont forts en marketing chez
VMWare)
15. Utilisation de JHipster
Allez dans votre répertoire partagé
cd /jhipster
Générez votre application
yo jhipster
Lancez votre serveur Tomcat
mvn tomcat7:run
Lancez votre serveur Grunt
grunt server
16. Fonctionnement de JHipster avec Docker
IDE / Text editor
Shared filesystem on /jhipster
9000
Web
browser
8080
Grunt server
Compass/Sass
JVM
Maven/Tomcat/
Spring/Hibernate/
HSQLDB
Docker container
Ubuntu host (on Virtualbox)
18. Résultats
Notre environnement de travail est
Simple à installer
Facile à partager avec nos collègues
Reproductible
Sécurisé
Performant (surtout si vous êtes en « natif » sur
Linux)
19. Questions/réponses
Dockerfile utilisé pour cette présentation :
https://github.com/jhipster/jhipster-docker
JHipster est disponible sur http://jhipster.github.io/
Questions tardives sur Twitter: @juliendubois