D35 - TP5 - Docker
Installer docker et docker-machine
Découverte de Docker
Suivre le tutoriel https://docs.docker.com/engine/getstarted/step_four/ pour créer sa propre image.
Il est possible de passer des variables d’environnement lors de la construction de l’image sans que celles-ci n’y soient stockées (c’est utilise pour le proxy par exemple) : –build-arg HTTP_PROXY=http://...
Vous pouvez maintenant construire vos propres images, en personnalisant d’autres (java, maven, payara, mysql, …). Pour orchestrer l’installation d’un environnement complet composé de plusieurs conteneur il faut étudier : https://docs.docker.com/compose/
Travail à faire
- Mettre en place plusieurs serveurs MYSQL sur votre machine chacun doit pouvoir être utilisé par le client sur l’hôte.
- Modifier le pour que les base de données soit dans des conteneurs séparés (si vous êtes root vous pouvez aussi monter un répertoire local).
- Créer un conteneur qui contient et exécute une application peut exécuter une application Java.
- En utilisant docker-compose, créer des conteneurs qui permette en une seule commande de lancer une base de données et une application java qui s’y connecte.
- Compiler une application Java avec Maven en utilisant docker. Si vous n’êtes pas root et ne pouvez pas monter les volumes de l’hôtes, un indice cherchez avec ONBUILD.
Cas d'usage avec GitLab
Ajouter simplement le fichier minimal suivant à la racine (Il indique l’image à utiliser et la commande).
- .gitlab-ci.yml
package: image: docker.lsis.univ-tln.fr:443/ebruno/maven:latest script: mvn package
Vérifier que la compilation et les tests passent, vérifier qu’une erreur est bien détecté. Par défaut, gitlab utilise des runner (https://gitlab.com/gitlab-org/gitlab-ci-multi-runner) partagé qui ont été configurés pour utiliser docker, vous pouvez installer des runners spécifiques sur n’importe quelle machine pour vos projets.
Utilisation d'un repository privé pour la compilation
Se connecter au repository privé (il faut un compte à demander à M. Bruno) et installer l’image Maven dans la VM :
docker login docker.lsis.univ-tln.fr:443 docker pull docker.lsis.univ-tln.fr:443/ebruno/maven:latest
Un simple test de maven :
docker run -v `pwd`:/usr/src/app -v ~/.m2:/home/user/.m2 -u `id -u`:`id -g` docker.lsis.univ-tln.fr:443/ebruno/maven:latest mvn -Duser.home=/home/user -version
Une compilation complète (ne marche pas en non root ou dans le groupe docker à cause du montage NFS) :
mvn archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DarchetypeVersion=1.1 \ -DgroupId=fr.univtln.login \ -DartifactId=MyApp \ -Dversion=1.0-SNAPSHOT cd MyApp docker run -v `pwd`:/usr/src/app -v ~/.m2:/home/user/.m2 -u `id -u`:`id -g` docker.lsis.univ-tln.fr:443/ebruno/maven:latest mvn -Duser.home=/home/user package
Le répertoire courant est monté dans le conteneur dans la VM, ainsi que le ~/.m2