Eu tinha requisitos similares de executar uma pilha LAMP, Mongo DB e meus próprios serviços
O Docker é uma virtualização baseada em SO, e é por isso que isola seu contêiner em torno de um processo em execução; portanto, requer pelo menos um processo em execução no FOREGROUND.
Para que você forneça seu próprio script de inicialização como ponto de entrada, seu script de inicialização se tornará um script de imagem estendido do Docker, no qual você pode empilhar qualquer número de serviços até que INICIAR PELO MENOS UM SERVIÇO PRÉVIO, O QUE DEMAIS TAMBÉM ESTÁ NO FINAL
Portanto, meu arquivo de imagem do Docker tem duas linhas abaixo no final:
COPY myStartupScript.sh /usr/local/myscripts/myStartupScript.sh
CMD ["/bin/bash", "/usr/local/myscripts/myStartupScript.sh"]
No meu script, eu executo todo o MySQL, MongoDB, Tomcat etc. No final, eu executo o meu Apache como um thread em primeiro plano.
source /etc/apache2/envvars
/usr/sbin/apache2 -DFOREGROUND
Isso me permite iniciar todos os meus serviços e manter o contêiner ativo, com o último serviço começando em primeiro plano
Espero que ajude
ATUALIZAÇÃO : Desde a última vez em que respondi a essa pergunta, surgiram coisas novas, como o Docker composite , que pode ajudá-lo a executar cada serviço em seu próprio contêiner, mas unir todos eles como dependências entre esses serviços, tente saber mais sobre o docker-compose e use-o, é uma maneira mais elegante, a menos que sua necessidade não corresponda a ele.