Salut Kernie,
Oui dans le scénario que tu décris Docker est fantastique. J'utilise la même approche avec VirtualBox et les SharedFolders, et pareil je déploie avec Ansible sur des machines virtuelles super-propres. À un moment j'ai regardé le passage à Docker. Le but c'était de migrer l'environnement de dev sur macOS vers Ubuntu, avec une période de transition utilisant Ubuntu dans une VirtualBox. C'est Docker qui aurait hébergé les environnements de déploiement virtualisés (vu que VirtualBox ne tourne pas dans VirtualBox). Seul problème, mon script de démarrage crée une IP pour le démon de l'appli, ainsi que quelques règles de port-forwarding. Et ça Docker n'aime pas trop car il ne virtualise pas la couche réseau (alternative : laisser au système confiné des droits sur le système hôte, ce qui n'est pas envisagé).
Je donne complètement raison à Henri sur la facilité de création d'un conteneur Docker. J'ai un script qui part de zéro (téléchargement de l'ISO Debian) et qui termine avec une image clonable, les VirtualBox Guest Additions, et une clé SSH déployée. Eh ben c'est pas trivial à mettre au point. Mais une fois que j'ai ça je peux tester la conf réseau dans une VM qui ressemble suffisamment à la prod, sans craindre de me couper l'accès SSH.
Je ne peux pas dire que Docker ce n'est pas bien, mais ça tombe toujours à côté de mes besoins qui ne me semblent pourtant pas extravagants. C'est illustré par un autre cas où l'on voit clairement que le déploiement directement sur JVM et en passant par Docker peuvent être concurrents.
Pour surveiller la production j'utilise une application qui tourne dans Google AppEngine. AppEngine est gratuit en-dessous de certains volumes. Tu balances une espèce de `.war` dedans et ça "juste marche". Pour les fonctionnalités autre que celles des Servlets tu tapes dans des API propriétaires. Google gère tout le cycle de vie de la JVM, te garantit la création d'instances à la demande en fonction de la montée en charge, ainsi que la persistance redondée, les files de messages etc. Accessoirement le kit de développement reproduit quelques-uns des comportements d'AppEngine. Donc c'est la joie, sauf qu'AppEngine ne supporte pas `Java 8` et ça pose plein de problèmes énervants.
Pour avoir droit à `Java 8` il faut passer à GKE (Google Container Engine) qui prend des images Docker. Avec une petite conf tu t'en tires à `$6/mois`, c'est vraiment correct. Et dans Docker tu peux déployer tout ce que tu veux dont un `JRE 8` et du Netty. Donc je me suis réjoui de découvrir Docker et j'ai lu de la doc sur le déploiement dans GKE.
Ce qui m'a fait penser que Docker est "juste" une façon de réparer l'horrible bordel des dépendances dans les distros, c'est un paragraphe de la doc conseillant de déployer une image Docker par service, et indiquant clairement que faire tourner un démon SSH dans une image Docker c'est probablement le symptôme d'une mauvaise utilisation ou d'une utilisation détournée.
Maintenant tu regardes le poids d'une image Docker minimale avec Alpine Linux et un JRE (``anapsix/alpine-java @8_server-jre_unlimited``) : `124 Mo`. Il doit rester de gros bouts du JDK. Mes jars font moins de `10 Mo`. Peut-être qu'en bricolant l'image d'Anapsix je m'en tire à `60 Mo`, donc un surcoût d'au moins `600 %` pour les temps de création et de téléchargement, bien joué Docker ! Ça c'est du déploiement léger !
Il vaut mieux créer son image Docker, la déployer une fois, et tout faire ensuite par SSH. Et dans ce cas la valeur ajoutée de Docker est juste négative à cause du surcroît de boulot. AppEngine fournit une bien meilleure granularité pour le déploiement, plus des services de stats, de journaux d'exécution etc.
Oui AppEngine est en train de mourir mais il y a d'autres raisons que la concurrence de Docker : les API plutôt énervantes et le kit de développement pas très sec. En tous cas AppEngine montre bien que le déploiement directement dans une JVM est une approche viable par rapport à Docker, et qui peut s'avérer plus performante.