Especialmente con Rails, no tengo ninguna experiencia, pero veamos desde el punto de vista de la ingeniería de software y la ventana acoplable.
El equipo de Docker defiende, a veces con bastante agresividad, que los contenedores tienen que ver con las aplicaciones de envío. En esta declaración realmente genial , Jerome Petazzoni dice que se trata de separación de preocupaciones. Siento que este es exactamente el punto que ya descubriste.
Ejecutar un contenedor de Rails que inicia una migración o configuración puede ser bueno para la implementación inicial y, probablemente, se requiera con frecuencia durante el desarrollo. Sin embargo, al entrar en producción, realmente debería considerar separar las preocupaciones.
Por lo tanto, diría que tiene una imagen, que usa para ejecutar el contenedor N rails y agrega herramientas/migración/configuración de cualquier contenedor, que usa para realizar tareas administrativas. Eche un vistazo a lo que los desarrolladores de la imagen oficial de Rails decir sobre esto:
Cuando mira esa imagen, no hay ningún comando de configuración o migración. Depende totalmente del usuario cómo usarlo. Entonces, cuando necesite ejecutar varios contenedores, siga adelante.
Desde mi experiencia con mysql esto funciona bien Puede ejecutar un contenedor solo de datos para alojar los datos, ejecutar un contenedor con el servidor mysql y finalmente ejecutar un contenedor para tareas administrativas como copia de seguridad y restauración. Para los tres contenedores puede usar la misma imagen. Ahora puede acceder libremente a su base de datos desde, digamos, varios Wordpress contenedores Esto significa una clara separación de preocupaciones. Cuando usas docker-compose
no es tan difícil manejar todos esos contenedores. Ciertamente, ya existen muchos contenedores y herramientas de terceros que también lo ayudan a configurar una aplicación compleja que consta de varios contenedores.
Finalmente, debe decidir si docker y la arquitectura de microservicios es adecuado para su problema. Como se describe en este artículo hay algunas razones en contra. Uno de los problemas centrales es que agrega una capa completamente nueva de complejidad. Sin embargo, ese es el caso con muchas soluciones y supongo que usted es consciente de esto y está dispuesto a aceptarlo.