Ich hatte eine ähnliche Anforderung, einen LAMP-Stack, Mongo DB und meine eigenen Dienste auszuführen
Docker ist eine betriebssystembasierte Virtualisierung, weshalb der Container um einen laufenden Prozess herum isoliert wird. Daher ist mindestens ein Prozess erforderlich, der in FOREGROUND ausgeführt wird.
Sie stellen also Ihr eigenes Startskript als Einstiegspunkt bereit, sodass Ihr Startskript zu einem erweiterten Docker-Image-Skript wird, in dem Sie eine beliebige Anzahl von Diensten stapeln können, bis MINDESTENS EIN VORDERER SERVICE gestartet ist, DER AUCH ZUM ENDE STEHT
Meine Docker-Bilddatei enthält also ganz unten zwei Zeilen:
COPY myStartupScript.sh /usr/local/myscripts/myStartupScript.sh
CMD ["/bin/bash", "/usr/local/myscripts/myStartupScript.sh"]
In meinem Skript führe ich alle MySQL, MongoDB, Tomcat usw. aus. Am Ende führe ich meinen Apache als Vordergrund-Thread aus.
source /etc/apache2/envvars
/usr/sbin/apache2 -DFOREGROUND
Auf diese Weise kann ich alle meine Dienste starten und den Container am Leben erhalten, wobei der zuletzt gestartete Dienst im Vordergrund steht
Ich hoffe es hilft
UPDATE : Seit ich diese Frage das letzte Mal beantwortet habe, sind neue Dinge wie Docker Compose aufgetaucht, mit denen Sie jeden Dienst in einem eigenen Container ausführen und dennoch alle als Abhängigkeiten zwischen diesen Diensten zusammenbinden können. Versuchen Sie, mehr über Docker-Compose und zu erfahren Verwenden Sie es, es ist eleganter, es sei denn, Ihr Bedarf passt nicht dazu.