Ceci est une ancienne révision du document !


D35 - TP5 - Docker

Vous pouvez installer Docker sur votre machine personnelle en suivant : https://docs.docker.com/engine/installation/.

Nous allons commencer par le mettre en place sur les machines des salles de TP (donc sans être root) cela fonctionne bien mais avec certaines limites (sur les volumes notamment).

Penser à configurer le proxy dans l’hôte :

export https_proxy=http://login:password@proxy.univ-tln.fr:3128/ && export http_proxy=$https_proxy 

Télécharger et installer les binaires de docker engine (c’est le moteur mais nous n’utiliserons que le client sur l’hôte) et docker machine (le gestionnaire de VM).

export PATH=~/bin:${PATH}
cd ~/bin
curl -L https://get.docker.com/builds/Linux/x86_64/docker-latest > docker && chmod +x docker
curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64 > docker-machine && chmod +x docker-machine
curl -L https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` > docker-compose && chmod +x docker-compose

Créer une machine virtuelle en y installant docker engine, fixer les variables d’environnement qui vont permettre au client docker exécuter sur l’hôte d’utiliser le moteur installé dans la VM :

docker-machine create --driver virtualbox default
eval "$(docker-machine env --no-proxy default)"
docker-machine ip default
Attention, par défaut la machine virtuelle est créée dans le répertoire ~/docker/machine. En salle de TP celui-ci est sur le réseau, vous pouvez créer le répertoire votrelogin dans /usr/local/vbox/travail/ et ajouter l’option –storage-path “/usr/local/vbox/travail/votrelogin” pour utiliser un espace local sur l’hôte.

La suite est maintenant inutile grâce à l’ajout de l’option –no-proxy dans la commande eval précédente. Supprimer le proxy dans l’hôte: <cli> unset http_proxy && unset https_proxy </cli>

Se connecter dans la VM et ajouter le proxy web pour permettre le téléchargement des images :

docker-machine -D ssh default
sudo vi /var/lib/boot2docker/profile

ajouter dans le fichier :

export HTTP_PROXY=http://login:password@proxy.univ-tln.fr:3128
export HTTPS_PROXY=http://login:password@proxy.univ-tln.fr:3128
export NO_PROXY=localhost,127.0.0.0/8,docker.lsis.univ-tln.fr

puis relancer le service docker dans boot2docker (la VM), quitter la VM et tester depuis l’hôte:

sudo /etc/init.d/docker restart
exit
docker search ubuntu
docker pull debian
docker run -it --name debian debian
Supprimer le conteneur Debian, ainsi que l’image.

Attention, la place est limitée dans la VM (cf. –virtualbox-disk-size à la création de la VM avec docker-machine) et surtout sur votre compte.

Le paramétrage du proxy peut être fait dès la création de la VM : docker-machine create –driver virtualbox –engine-env http_proxy=http://login:passwd@proxy.univ-tln.fr:3128/ –engine-env https_proxy=http://login:passwd@proxy.univ-tln.fr:3128/ default

Suivre le tutoriel https://docs.docker.com/linux/ 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/

  • Mettre en place plusieurs serveurs MYSQL sur votre machine chacun doit pourvoir être 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.
Après avoir eu un compte sur https://gitlab.lsis.univ-tln.fr/, créer un projet, y déposer le projet de base créé par l’archetype maven quickstart et mettre en place l’intégration continue en suivant les instructions suivantes.

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.

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

—- dataentry page —- type : TP enseignement_tags : D35 technologie_tags : Docker theme_tags : Composants