Cette question serait également pertinente pour golang, où vous pouvez simplement extraire des binaires liés statiquement et les exécuter quelque part, contrairement à Python ou C ++ où vous avez généralement un grand nombre de bibliothèques liées, ce qui incite les utilisateurs à créer un conteneur docker à partir du environnement de développement.
Il y a deux points à répondre ici:
Un: il doit y avoir un meilleur moyen , et il y a: vous pouvez construire des conteneurs de docker plus petits (et plus efficaces) en utilisant uniquement l'environnement d'installation, ce qui offre des avantages similaires à ceux de Golang avec environnement par rapport à Golang -binaires conteneurs. Dans le cas de Java, vous pouvez créer un gros fichier jar ou une application installable contenant tous les fichiers jar de la bibliothèque et un script shell. dans le cas de Python, vous pouvez utiliser auditwheel pour créer des roues autonomes indépendantes de l'environnement de construction (et vous pouvez utiliser C ++ avec des liens statiques produisant presque le même effet).
Deux: pour quoi avez-vous besoin de docker? En Java, vous pouvez faire beaucoup de séparation entre différents composants en utilisant des chargeurs de classes, mais l’essentiel est ce qui est autour de l’application Java. Aucune application Java ne s'exécute par elle-même - si elle ne s'exécute pas dans le menu fixe, elle devrait généralement être supervisée par supervisord, systemd ou autres. Entrez dans le nuage Kubernetes, Marathon ou Docker, qui utilise l'abstraction de conteneur pour virtualiser non pas l'hôte lui-même, mais virtualise l'ensemble du réseau de sorte que vous ne puissiez déployer que des conteneurs et qu'ils s'exécutent sur un hôte aléatoire.
Les microservices fonctionnent généralement sur des nuages basés sur un menu fixe, car ils vous permettent de traiter vos hôtes du menu fixe comme du bétail, et non comme des animaux domestiques, et de la même manière avec les applications dockerisées. Bien sûr, cette abstraction présente des fuites dès que vous montez des volumes d’hôte sur le menu fixe et que vous devez exécuter des conteneurs de menu fixe sur l’hôte qui possède ces volumes. Certaines personnes parviennent même à éviter cela.