Speziell mit Rails habe ich keine Erfahrung, aber schauen wir mal aus Docker- und Software-Engineering-Sicht.
Das Docker-Team befürwortet, manchmal ziemlich aggressiv, dass es bei Containern um Versandanwendungen geht. In diese wirklich tolle Aussage , sagt Jerome Petazzoni, dass es um die Trennung der Anliegen geht. Ich habe das Gefühl, dass dies genau der Punkt ist, den Sie bereits herausgefunden haben.
Das Ausführen eines Rails-Containers, der eine Migration oder Einrichtung startet, kann für die anfängliche Bereitstellung gut sein und wahrscheinlich während der Entwicklung oft erforderlich sein. Wenn Sie jedoch in die Produktion gehen, sollten Sie wirklich darüber nachdenken, die Bedenken zu trennen.
Daher würde ich sagen, Sie haben ein Image, mit dem Sie den N-Rails-Container ausführen, und fügen einen Tools/Migration/Setup-Container hinzu, mit dem Sie Verwaltungsaufgaben erledigen. Schauen Sie sich an, was die Entwickler aus dem offiziellen Rails-Image gemacht haben dazu sagen:
Wenn Sie sich dieses Bild ansehen, gibt es keinen Setup- oder Migrationsbefehl. Es ist völlig dem Benutzer überlassen, wie er es verwendet. Wenn Sie also mehrere Container ausführen müssen, fahren Sie einfach fort.
Aus meiner Erfahrung mit mysql das funktioniert gut. Sie können einen Nur-Daten-Container ausführen, um die Daten zu hosten, einen Container mit dem MySQL-Server ausführen und schließlich einen Container für Verwaltungsaufgaben wie Sicherung und Wiederherstellung ausführen. Für alle drei Container können Sie dasselbe Bild verwenden. Jetzt können Sie frei auf Ihre Datenbank von, sagen wir, mehreren Wordpress zugreifen Behälter. Das bedeutet eine klare Trennung der Anliegen. Wenn Sie docker-compose
verwenden Es ist nicht so schwierig, all diese Container zu verwalten. Sicherlich gibt es bereits viele Container und Tools von Drittanbietern, die Sie auch beim Aufbau einer komplexen Anwendung bestehend aus mehreren Containern unterstützen.
Schließlich sollten Sie entscheiden, ob docker und die Microservice-Architektur ist das Richtige für Ihr Problem. Wie in diesem Artikel beschrieben Es gibt einige Gründe dagegen. Eines der Kernprobleme besteht darin, dass es eine ganz neue Ebene der Komplexität hinzufügt. Dies ist jedoch bei vielen Lösungen der Fall, und ich denke, Sie sind sich dessen bewusst und bereit, es in Kauf zu nehmen.