Docker – Lancer une application dans un conteneur Docker avec Maven

Je vais faire un sujet simple pour parler de Docker et de Maven. Le but de ce sujet est de lancer une application web Java dans un conteneur Docker Tomcat en utilisant un dockerfile.

L’application est téléchargeable sur ce repository.

Prérequis

Docker doit être installé sur votre système. Il est nécessaire d’avoir déjà manipulé Docker et comprendre les concepts d’image,  de conteneur et du Dockerfile pour bien comprendre le sujet.

Le pom.xml

L’application sera une application web (package  war). Je définis le finalName au niveau du build. Ainsi, des que l’on fait un maven package, le fichier war généré dans le dossier target aura comme nom celui du finalName avec l’extension “.war” (ici myApp.war)

On va utiliser le plugin Maven docker-maven-plugin de fabric8. Celui permet de construire des images Docker et de construire des conteneurs via ces images. En paramètre de ce plugin, on va préciser le Dockerfile utilisé (dockerFileDir). Le nom du  Dockerfile doit avoir le nom standard “Dockerfile”. Le paramètre assembly permet de préciser les fichiers importés dans le conteneur docker. Ainsi, on lui précise de rajouter le fichier war généré par le maven package.

Le Dockerfile

Le dockerfile reste très simple. On prend une image officiel de Tomcat et on met à jour le dossier webapp de Tomcat avec la ficher war généré par maven.

Avec le plugin fabric8,  les fichiers importés  se trouve dans le dossier “maven/”. Du coup, le Dockerfile se basant sur une image officiel de tomcat 8 va copier le fichier war de notre application dans les applications déployées par tomcat (dossier “webapps”).

Exécution via maven

Maintenant nous allons exécuter l’application se trouvant dans un conteneur via une tache maven. Voici la commande à exécuter: mvn clean package docker:build docker:start

Un peu d’explication: On part sur un maven clean package pour construire le fichier war “myApp.war” dans le dossier target. On va exécuter l’action “build” du plugin “docker-maven-plugin” afin de construire une image sur notre docker local. Enfin, on exécute l’action “start” sur ce même plugin pour construire le conteneur de cette image.

Des que la commande annonce qu’elle est terminée, vous pouvez essayer l’url  “http://localhost:8080/myApp/” ou bien “http://localhost:8080/myApp/hello” sur notre navigateur web préféré afin de tester que l’application a bien été déployée.

Pour confirmer que l’application vient bien d’un conteneur docker, vous pouvez faire un “docker ps” sur une invite de commande. Vous verrez une image du genre lancée.

IMAGE         COMMAND           PORTS
myappimgname  "catalina.sh run" 0.0.0.0:8080->8080/tcp

Stoppez cette image (docker stop *containerId*), vous verrez bien que l’application web n’est plus disponible.

Attention: Afin de relancer votre application, vous devez à chaque fois stopper votre image manuellement. Sinon, le port 8080 ne sera pas disponible.

Conclusion

J’ai utilisé une image Tomcat pour faire un serveur Java web, mais après libre à vous de faire des images Docker via Maven à votre guise.

 Si vous avez des questions, n’hésitez pas à les poser.

 

Leave a Reply

Your email address will not be published. Required fields are marked *