La façon dont nous le faisons est que nous avons 3 pièces (ou artefacts) pour chaque application en cours d'exécution.
- L'application que nous développons. C'est la même chose quel que soit l'environnement. Pour correspondre à votre exemple, ce sera l'application Spring sous la forme d'un pot / war.
- Conteneur qui exécutera l'application. C'est la même chose quel que soit l'environnement. Si vous utilisez Spring Boot, vous n'avez plus besoin de Tomcat et seulement du runtime Java. Utilisez donc le conteneur Docker openjdk.
- La configuration dont l'application a besoin. C'est la seule chose qui diffère d'un environnement à l'autre. Dans une application Spring, vous utiliserez probablement un fichier de propriétés.
Le fichier de configuration réside dans un contrôle de source distinct. Auparavant, c'était Git, mais nous utilisons maintenant un SaaS que nous avons construit, appelé Config, sur http://www.configapp.com . La fonction principale de Config est la gestion facile de la configuration spécifique à l'environnement. Pour exécuter notre application sur un nouveau serveur, nous extrayons le conteneur Docker, l'artefact d'application et le fichier de configuration de cet environnement. Dans le conteneur, nous montons le répertoire dans lequel l'application et le fichier de configuration sont stockés, dans le cadre de l'exécution du conteneur. Notre application est la même. Notre conteneur / image est le même. Seul le fichier de configuration est différent.
Concernant le fichier de configuration vs les variables d'environnement. Pendant longtemps, nous avons utilisé des fichiers de configuration. Lorsque nous avons utilisé PaaS / cloud, nous avons utilisé des variables d'environnement. C'était un travail supplémentaire si vous avez beaucoup de configuration, nous avons donc fini par utiliser des variables d'environnement pour déterminer le fichier de configuration correct. Nous avons une application qui a transformé les propriétés en variables d'environnement, mais c'est atypique. Si nous avons un serveur de configuration centralisé sanctionné par l'entreprise, nous l'utilisons, sinon nous aimons la simplicité des fichiers de configuration.
Donc, pour résumer, nous tirons app.jar, app.properties, openjdk Docker. Ensuite, nous exécutons openjdk Docker pour monter l'emplacement de app.jar et app.properties. La seule chose spécifique à l'environnement est app.properties. Pour gérer facilement app.properties, quel que soit le nombre de clés de propriété, les environnements, les instances de cluster / région, nous utilisons Config.