Ich verwende Docker-Compose in der Entwicklungsumgebung mit einer docker-compose.yml
Datei, in der ich alle benötigten Container aufliste.
Außerdem habe ich ein zentrales Git-Repository, einen Jenkins-Server und einen weiteren Server, auf dem ich sowohl die Staging- als auch die Produktionsumgebung verwalten werde.
Die Frage ist also, wie der Bereitstellungsprozess besser organisiert werden kann.
Nun git push
wird auf der Git-Serverseite ein Jenkins Build-Job ausgelöst. Je nach Branch-Name (Staging oder Produktion) werden unterschiedliche Jobs ausgelöst.
Ein Build-Job verwendet Docker-Compose, um die gesamte Umgebung hochzufahren und Tests auszuführen. Wie schiebe ich dann neue Container in die Staging-/Produktionsumgebung?
Eine Möglichkeit besteht darin, sie in das private oder öffentliche Docker-Register zu übertragen. Was ist jedoch die beste Vorgehensweise zum Aktualisieren von Containern in der Produktion? Sollte der Jenkins-Server einfach per SSH Rohdaten kill
, rm
- pull
und run
-Befehle ausführen? Ich sehe keine Beispiele.
Antwort1
Kubernetes, Docker Swarm oder Rancher sind wahrscheinlich die besten Möglichkeiten, ein sogenanntes Rolling Update umzusetzen.
Grundsätzlich wird bei einem Rolling Update eine Sammlung von Containern (ein sogenannter Service) nacheinander aktualisiert. Stellen Sie sich also vor, Ihre App läuft auf drei Containern. Bei einem Rolling Update wird der erste Container heruntergefahren und aktualisiert, und so weiter, bis der Service vollständig aktualisiert ist. Das bedeutet, dass die App praktisch keine Ausfallzeit hat, da die Lastverteiler in diesen Produkten intelligent sind und nicht auf zu aktualisierende Container umleiten.
Über diesen Link erhalten Sie eine grundlegende Implementierung von Swarm, bei der ein Dienst ausgeführt und anschließend aktualisiert wird.
Für die einfachste Einrichtung und Implementierung ist Rancher meiner Erfahrung nach ein guter Ausgangspunkt, um sich mit all diesen Konzepten vertraut zu machen. Es ist im Grunde eine Schnittstelle auf verschiedenen Docker-Technologien wie Kubernetes.