J'avais une exigence similaire d'exécuter une pile LAMP, Mongo DB et mes propres services
Docker est une virtualisation basée sur le système d'exploitation, c'est pourquoi il isole son conteneur autour d'un processus en cours d'exécution, il nécessite donc au moins un processus s'exécutant dans FOREGROUND.
Ainsi, vous fournissez votre propre script de démarrage comme point d'entrée, ainsi votre script de démarrage devient un script d'image Docker étendu, dans lequel vous pouvez empiler n'importe quel nombre de services dans la mesure où AU MOINS UN SERVICE PRÉCÉDENT EST DÉMARRÉ, TROP VERS LA FIN
Donc, mon fichier image Docker a deux lignes ci-dessous à la toute fin:
COPY myStartupScript.sh /usr/local/myscripts/myStartupScript.sh
CMD ["/bin/bash", "/usr/local/myscripts/myStartupScript.sh"]
Dans mon script, j'exécute tout MySQL, MongoDB, Tomcat, etc. En fin de compte, je lance mon Apache en tant que thread de premier plan.
source /etc/apache2/envvars
/usr/sbin/apache2 -DFOREGROUND
Cela me permet de démarrer tous mes services et de maintenir le conteneur en vie avec le dernier service commencé étant au premier plan
J'espère que ça aide
MISE À JOUR : Depuis ma dernière réponse à cette question, de nouvelles choses sont apparues comme Docker compose , qui peut vous aider à exécuter chaque service sur son propre conteneur, tout en les liant tous ensemble en tant que dépendances parmi ces services, essayez d'en savoir plus sur docker-compose et utilisez-le, c'est de manière plus élégante à moins que votre besoin ne corresponde pas à celui-ci.