Während es einige winzige überlappende Regionen gibt, lösen Docker und die Debian-Verpackungssysteme im Wesentlichen zwei sehr unterschiedliche Probleme :
Das Debian-Paketierungssystem ist so aufgebaut, dass Software auf einem Host installiert und so einfach wie möglich aktualisiert werden kann. Es ist in der Lage, komplexe Abhängigkeits- und Einschränkungsmuster zwischen Softwarekomponenten zu verarbeiten, z. B. "Software X Version A erfordert Software Y mit Version B oder neuer" oder "Software X sollte niemals mit Software Z Version C installiert werden".
Das Docker-System dient zur einfachen Beschreibung und Bereitstellung von Diensten, insbesondere von Mikrodiensten, möglicherweise auf mehreren Hosts - z. B. einem Docker-Schwarm oder einem Kubernetes-Cluster.
Diese beiden Probleme sind im Wesentlichen orthogonal, was bedeutet, dass bei dem zu lösenden Bereitstellungsproblem eines von beiden oder möglicherweise keines von beiden als Teil der Lösung verwendet werden kann. Wenn Sie beide verwenden, wird das Debian-Paket bei der Erstellung des Docker-Images verwendet, und Ihre Docker-Datei (die Rezepte, die zur Erstellung des Docker-Images verwendet werden, das das in einem Container ausgeführte „virtualisierte System“ beschreibt) würde Ihr Debian-Repository im Wesentlichen im registrieren Quellen des Debian-Verpackungssystems und installieren Sie Ihr Paket.
In diesem Sinne scheint es mir, dass Sie wirklich danach suchen, das unveränderliche Servermuster zu implementieren. Die jüngste Entwicklung der Cloud-Technologien ermöglichte ein Software-Upgrade nicht durch Verwendung des klassischen Software-Upgrade-Systems von einem Softwarepaket-System (wie dem Debian-Paketierungssystem), sondern durch einfaches Ersetzen des vollständigen Servers auf einmal. (Einige Personen taten dies vor dieser Entwicklung, indem sie drei Betriebssysteme auf einem Server hatten, zwei, die abwechselnd zum Ausführen der Appliance verwendet wurden, und ein Mini-Betriebssystem, das für den Austausch der Appliance vorgesehen war. Obwohl dies nicht allzu komplex ist, scheint dies immer ein Problem geblieben zu sein Nische.) Diese Technik kann für Sie von Interesse sein, da der endgültige Status des Servers von der „Upgrade-Historie“ des Servers abhängt, insbesondere wenn in der Software Fehler auftreten Upgrade-Prozess. Diese Heterogenität ist schlecht,
Wir haben Tausende dieser Kisten auf dem Feld. Wir verwalten die Paketabhängigkeiten, die Prozessregistrierung usw. über ein Deb-Paket mit unterschiedlichem Erfolg.
könnte sich darauf beziehen. Das unveränderliche Servermuster beseitigt diese Fehlerquelle, indem der Begriff „Upgrade-Verlauf“ im Wesentlichen aus dem Problem entfernt wird.
Nun gibt es verschiedene Möglichkeiten, das unveränderliche Servermuster zu implementieren. Zwei beliebte Möglichkeiten sind die Verwendung von Docker-Images und Images oder die Verwendung von "Master-Instanz-Images" von Ihrem Cloud-Anbieter (diese werden in AWS als AMIs und in Google Compute Engine nur als benutzerdefinierte Images bezeichnet). . Ihr Anwendungsfall verbietet die Verwendung von Cloud-basierten Techniken. Ich gehe daher davon aus, dass Docker-Images die einzige in Frage kommende Option sind. (Zur Vervollständigung ist es durchaus möglich, andere Ansätze zu verwenden, beispielsweise Virtual Box oder eine ähnliche Virtualisierungslösung als Alternative zu Docker.)
Wenn Sie die unveränderliche Servermustertechnik verwenden, stellen Sie ein neues Artefakt (das Docker-Image) vor, das Ihren Server darstellt, und dieses Artefakt kann auch getestet werden. Außerdem ist es sehr einfach, ein Setup zu erhalten, das Ihre Produktionseinstellungen - abgesehen von der Servicebelastung - genau wiedergibt.
Wenn Sie nun das von Ihnen beschriebene konkrete Problem betrachten möchten, nehmen wir an, dass die Implementierung des Musters für unveränderliche Server mit Docker tatsächlich Ihren Wünschen entspricht. Da das Docker-System und das Debian-Paketierungssystem sich nicht gegenseitig ausschließen, sondern ergänzen (vgl. Einführung), müssen wir uns noch mit der Frage befassen, ob Sie ein Debian-Paket für Ihre Software vorbereiten sollen.
Die Relevanz der Verwendung eines Debian-Pakets zur Installation Ihrer Software (im Docker-Image oder auf einem Host) liegt in der Komplexität des zu lösenden Versionsproblems. Wenn Sie mehrere Versionen Ihrer Software gleichzeitig ausführen, gelegentlich ein Downgrade durchführen müssen und komplexe Versionsanforderungen haben, die Sie sorgfältig dokumentieren müssen, ist ein Debian-Paket ein Muss. Andernfalls kann dieser Schritt übersprungen werden. Da Sie jedoch bereits Anstrengungen unternommen haben, diese Pakete zu erstellen und bereitzustellen, ist es nicht wirklich sinnvoll, Ihre Arbeit aufzugeben. Ich würde daher vorschlagen, weiterhin Ihre Debian-Pakete zu produzieren.