Warum nicht das Konfigurationsmanagement-Tool anstelle von Dockerfile verwenden?

8

Ich bin ziemlich neu in Docker und Konfigurationsmanagement-Tools.

Zuerst habe ich angefangen, Bash-Skripte zu schreiben, um meine Vagrant-Boxen für meine Entwicklungsmaschinen bereitzustellen, aber jetzt habe ich dafür Chef verwendet, damit ich dieselbe Quelle verwenden kann, um sowohl Entwicklungs- als auch Produktionsumgebungen bereitzustellen und zu versuchen, sie als ähnlich zu erhalten wie möglich.

Seit ich Chef benutze, genieße ich den DRY-Aspekt, dass ich keine Shell-Skriptzeilen von Projekt zu Projekt kopieren und einfügen muss, die Möglichkeit, Computer bereitzustellen, auf denen verschiedene Linux-Distributionen mit einer einzigen konsolidierten Quelle ausgeführt werden, und den Komfort der Verwendung von von der Community bereitgestellten Kochbüchern.

Jetzt, da ich Chef verwendet habe, um meine VMs bereitzustellen, fühlt es sich an, als würde ich einen Schritt zurück machen, wenn ich einer Docker-Datei RUN-Befehle gefolgt von Shell-Befehlen hinzufüge, um das zu erreichen, was durch einfaches Ausführen eines Chef-Rezepts erreicht werden könnte.

Ich habe gegoogelt und nichts gefunden (aber vielleicht habe ich es einfach verpasst), aber es sieht nicht so aus, als gäbe es eine einfache Möglichkeit, mit Chef-Rezepten Docker-Container zu erstellen. Warum ist das so?

Ich verstehe, dass Container unveränderlich sein sollen und Konfigurationsmanagement-Tools häufig verwendet werden, um Maschinen während ihrer gesamten Lebensdauer neu zu konfigurieren. Würden sie nicht dennoch viele Vorteile bieten, wenn sie beim ersten Erstellen des Containers verwendet werden?

David Eugene Pratt
quelle
1
Konfigurationsmanagement-Tools können weiterhin unveränderlich verwendet werden, um Ihren Server / Docker-Container / usw. nach der Bereitstellung zu konfigurieren. Ändern Sie dann einfach nicht die Konfiguration und stellen Sie eine neue bereit. In ähnlicher Weise ist die Idempotenz nahezu unveränderlich .
James Shewey
@ JamesShewey Idempotent bedeutet nicht unveränderlich. Unveränderliche Maschinen müssen gerollt werden, um aktualisiert zu werden.
Matt O.
@ Matt O. Richtig. Sie können jedoch ein idempotentes Konfigurationsverwaltungssystem verwenden, um einen unveränderlichen Server zu rollen. Sobald die gerollte Maschine wieder online ist, konfiguriert das Konfigurationsmanagementsystem das System in den endgültigen, unveränderlichen Zustand - Installation von Paketen, Festlegen von Konfigurationsdateien und Starten von Diensten und dergleichen. Nur weil ein System idempotent ist, heißt das nicht, dass es nicht auch unveränderlich sein kann. Es ist nur eine Frage, ob Sie sich entscheiden, es herunterzubrennen und erneut bereitzustellen, wenn Sie Änderungen an der Konfiguration vornehmen, oder ob Sie diese Änderung veröffentlichen und das vorhandene System aktualisieren.
James Shewey

Antworten:

5

Das Tool, das Sie benötigen, ist Packer , der Docker als "Builder" und Chef als "Provisioner" verwendet. Anschließend können Sie das resultierende Bild zu Ihrem Repo hinzufügen und wiederverwenden, ohne es erneut verpacken zu müssen, bis sich Ihre Rezepte ändern.

Gaius
quelle
4

Diese Strategien haben nichts miteinander zu tun.

Container (wie Docker) sind eine Methode zum Bereitstellen und Isolieren von Anwendungen. Container sind sehr beliebt, weil sie transportabel sind. Sie können in den meisten Fällen lokal entwickelt und in der Vorschau angezeigt werden. Daher ist es sinnvoll, Anwendungen in sie einzufügen.

Warum Docker Shell-Scripting verwendet : Ein Docker-Image ist buchstäblich ein Linux-Container-Image. Es ist ein Linux-Betriebssystem und der Punkt dieses Containers, so leicht und effizient wie möglich zu sein. Wenn Sie Chef, Ruby, Erlang und alle anderen Bibliotheken hinzufügen, die erforderlich sind, um Chef als Provisioner in einer Docker-Datei zu haben, müssen Sie keine Container mehr verwenden.

Das Konfigurationsmanagement dient zum Bereitstellen eines Rechenknotens. Ihr Konfigurationsendstatus spiegelt sich normalerweise im Code wider und verfügt über einen zentralen Server zur Aufrechterhaltung des Status. Mit Tools wie vagrant können Sie Vagrant-Maschinen mithilfe von chef konfigurieren, was für Entwickler größtenteils unpraktisch ist. Während Sie die meisten dieser Tools nur in einem lokalen Modus verwenden können, wird die Wartung ziemlich aufwändig. Diese zentralen Server dienen zum automatischen Sortieren der Versionsverwaltung und des Abhängigkeitsmanagements.

Bash ist von Natur aus kein Schritt zurück. Beispielsweise erstellen viele Organisationen, die vollständig unveränderliche Image-Pipelines erstellen, ihre Images mit Bash. Dies gewährleistet Stabilität und Vorhersehbarkeit sowie eine gemeinsame Sprache der Ingenieure (viele Ingenieure haben möglicherweise unterschiedliche Konfigurationsverwaltungshintergründe).

Unveränderliches vs Konfigurationsmanagement . Die unveränderliche Infrastruktur ändert sich nicht und muss vollständig ersetzt werden, um aktualisiert zu werden. Konfigurationsverwaltung impliziert, dass der Status eines Computers von einem Agenten oder einer fremden Verbindung (wie bei Ansible) verwaltet wird.

Docker-Container sind von Natur aus unveränderlich. Sie behalten keine Daten bei und sie müssen gerollt werden, um aktualisiert zu werden.

Matt O.
quelle