Upgrade ohne Neuaufbau mit einem guten/fertigen Image?

Hallo zusammen.

Ist es möglich, auf eine neuere Version zu aktualisieren, ohne das gesamte System neu zu erstellen?

Ich denke an ein Szenario, in dem zwei Discourse-Anwendungen praktisch identisch sind, und sobald ich ein neues Image für eine der beiden fertig habe, könnte ich es verwenden, um die zweite Discourse-Instanz bereitzustellen, wobei alle Konfigurationen/Parameter für den Container vorhanden sind.

Ich nehme an, das Einzige, worum sich dieser Container noch kümmern müsste, wäre die pg-Datenbankmigration?

Macht das Sinn und wenn ja, wie kann man das tun, idealerweise ohne Quellcode zu manipulieren?

Vielen Dank, L.

Sie können ein Image erstellen, es in ein Repository pushen und es dann mit ./launcher start-cmd app starten, um den Docker-Befehl zum Starten des Containers zu erhalten (Sie ersetzen jedoch Ihr lokales Container-Repository).

Und doch müssen Sie dann die Datenbank migrieren, Assets vorab kompilieren und so weiter.

Wenn Sie Ausfallzeiten vermeiden möchten, ermöglicht Ihnen die Zwei-Container-Einrichtung, einen neuen Container zu erstellen, während der alte weiterläuft, und kümmert sich dann um die Migrationen und Ähnliches.

Wenn Sie besonders vorsichtig sein möchten, können Sie SKIP_POST_DEPLOYMENT_MIGRATIONS in Ihrer app.yml festlegen und dann rake db:ensure_post_migrations db:migrate ausführen, nachdem der neue Container gestartet wurde. Wenn Sie dies nicht tun, kann die Datenbank so migriert werden, dass der alte Container sie nicht mehr verwenden kann. Es ist nicht oft ein Problem, und dann auch nicht sehr lange.

Ausfallzeiten sind für mich kein Problem.

Zwei Anwendungen, an die ich denke, wären – praktisch identisch –, aber nicht dasselbe.

Zwei Anwendungen wären unterschiedliche Sites, was unterschiedliche Datenbanken, Volumes, Ports, Namen bedeutet …, aber sie hätten dieselbe – sozusagen – Basis-Diskussion (+ dieselben Plugins, dasselbe, was für diesen Kern/diese Basis entscheidend sein könnte).

In der idealen Welt von Discourse – falls dies noch nicht existiert – könnte für ein solches Szenario ein solches neues Image, sobald es das erste Mal erstellt wurde, sogar direkt mit Docker-Tools verwendet werden – und die Datenbank oder alles, was zu diesem neuen Image/dieser neuen Discourse-Version „migriert“ werden müsste, würde der Start-/Bootvorgang eines solchen „sekundären“ Containers – vielleicht mithilfe von Umgebungsvariablen – entscheiden, die notwendigen Migrationen der Datenbanken zu überprüfen/durchzuführen.

Der Hauptvorteil – über den viele wahrscheinlich schon nachgedacht haben – ist ein einziges Image für beide (oder noch mehr, wenn manche Leute das tun) Container/Anwendungen.

Sie können das tun, wie ich es beschrieben habe. Es gibt auch ein neues Schema in Arbeit, das es ermöglicht, ein einzelnes Bild zu verwenden und nicht neu zu erstellen. Es wird nicht unterstützt, daher müssen Sie hier oder auf GitHub gut suchen.