Solución:
Solo puede haber un ENTRYPOINT, pero ese destino suele ser un script que lanza tantos programas como sean necesarios. Además, puede usar, por ejemplo, Supervisord o similar para encargarse de lanzar múltiples servicios dentro de un solo contenedor. Este es un ejemplo de un contenedor docker que ejecuta mysql, apache y wordpress dentro de un solo contenedor.
Diga, tiene una base de datos que es utilizada por una sola aplicación web. Entonces probablemente sea más fácil ejecutar ambos en un solo contenedor.
Si tiene una base de datos compartida que es utilizada por más de una aplicación, entonces sería mejor ejecutar la base de datos en su propio contenedor y las aplicaciones cada una en sus propios contenedores.
Hay al menos dos posibilidades de cómo las aplicaciones pueden comunicarse entre sí cuando se ejecutan en diferentes contenedores:
- Utilice puertos IP expuestos y conéctese a través de ellos.
- Las versiones recientes de Docker admiten la vinculación.
Tenía un requisito similar de ejecutar una pila LAMP, Mongo DB y mis propios servicios
Docker es una virtualización basada en el sistema operativo, por lo que aísla su contenedor alrededor de un proceso en ejecución, por lo que requiere al menos un proceso que se ejecute en PRIMER PLANO.
Por lo tanto, proporciona su propio script de inicio como punto de entrada, por lo que su script de inicio se convierte en un script de imagen de Docker extendido, en el que puede apilar cualquier número de servicios hasta SE INICIA AL MENOS UN SERVICIO EN PRIMER PLANO, QUE TAMBIÉN HACIA EL FINAL
Entonces, mi archivo de imagen de Docker tiene dos líneas a continuación al final:
COPY myStartupScript.sh /usr/local/myscripts/myStartupScript.sh
CMD ["/bin/bash", "/usr/local/myscripts/myStartupScript.sh"]
En mi script ejecuto todo MySQL, MongoDB, Tomcat, etc. Al final ejecuto Apache como hilo de primer plano.
source /etc/apache2/envvars
/usr/sbin/apache2 -DFOREGROUND
Esto me permite iniciar todos mis servicios y mantener vivo el contenedor con el último servicio que comenzó a estar en primer plano.
Espero eso ayude
ACTUALIZAR: Desde la última vez que respondí esta pregunta, han surgido cosas nuevas como Docker compose, que puede ayudarlo a ejecutar cada servicio en su propio contenedor, y aun así vincularlos a todos como dependencias entre esos servicios, intente saber más sobre docker-compose y use es más elegante a menos que su necesidad no coincida con él.
Estoy totalmente en desacuerdo con algunas soluciones anteriores que recomendaban ejecutar ambos servicios en el mismo contenedor. Está claramente indicado en la documentación que no es recomendable:
En general, se recomienda que separe las áreas de interés utilizando un servicio por contenedor. Ese servicio puede bifurcarse en múltiples procesos (por ejemplo, el servidor web Apache inicia múltiples procesos de trabajo). Está bien tener varios procesos, pero para obtener el máximo beneficio de Docker, evite que un contenedor sea responsable de varios aspectos de su aplicación general. Puede conectar varios contenedores mediante redes definidas por el usuario y volúmenes compartidos.
Hay buenos casos de uso para supervisores o programas similares, pero ejecutar una aplicación web + una base de datos no forma parte de ellos.
Definitivamente, debe usar docker-compose para hacer eso y orquestar múltiples contenedores con diferentes responsabilidades.