Gérer son environnement de
développement avec Docker

Julien Dubois - @juliendubois
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
Le problème
Qu’est-ce que
JHipster ?
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…
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
Notre environnement de
développement

Java : JDK, Maven…
JavaScript : Node.js, NPM, Yo, Grunt, Bower…
CSS : Ruby, Compass, Sass…
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 »
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 ?
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
La solution
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
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)
Installation et utilisation du
container Docker
Téléchargez l’image Docker officielle de JHipster
sudo docker pull jdubois/jhipster-docker
Lancez un container
sudo docker run -v ~/jhipster:/jhipster -p 8080:8080 -p
9000:9000 -p 4022:22 -t jdubois/jhipster-docker
Importez votre clef SSH
cat .ssh/id_rsa.pub | ssh -p 4022 jhipster@localhost
'mkdir .ssh && cat >> .ssh/authorized_keys'
Connectez-vous
ssh -p 4022 jhipster@localhost
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
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)
Démonstration
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)
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

Gérer son environnement de développement avec Docker

  • 1.
    Gérer son environnementde développement avec Docker Julien Dubois - @juliendubois
  • 2.
    Agenda Le problème Présentation deJHipster Les problèmes liés à notre environnement de dév La solution Utilisation de Docker Démonstration Questions/Réponses
  • 3.
  • 4.
  • 5.
    JHipster Un générateur Yeoman Permetde 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
  • 7.
    Notre environnement de développement Java: JDK, Maven… JavaScript : Node.js, NPM, Yo, Grunt, Bower… CSS : Ruby, Compass, Sass…
  • 8.
    3 problèmes principaux Toutinstaller 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
  • 11.
  • 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’utilisationde 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)
  • 14.
    Installation et utilisationdu container Docker Téléchargez l’image Docker officielle de JHipster sudo docker pull jdubois/jhipster-docker Lancez un container sudo docker run -v ~/jhipster:/jhipster -p 8080:8080 -p 9000:9000 -p 4022:22 -t jdubois/jhipster-docker Importez votre clef SSH cat .ssh/id_rsa.pub | ssh -p 4022 jhipster@localhost 'mkdir .ssh && cat >> .ssh/authorized_keys' Connectez-vous ssh -p 4022 jhipster@localhost
  • 15.
    Utilisation de JHipster Allezdans 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 JHipsteravec 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)
  • 17.
  • 18.
    Résultats Notre environnement detravail 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é pourcette présentation :
 https://github.com/jhipster/jhipster-docker JHipster est disponible sur http://jhipster.github.io/ Questions tardives sur Twitter: @juliendubois