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?
quelle
Antworten:
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.
quelle
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.
quelle